我在一个Swing应用程序中使用JWebBrowser。此类属于DJ项目。它需要执行swt jar。现在,我已经将Windows的swt jar包含到了应用程序的jar包中。我想知道如何在同一包装中包含Linux/Mac的swt jars?我正在使用Ant构建应用程序jar。我应该为不同的平台构建不同的swt jar并把它们放到jar中吗?
我在一个Swing应用程序中使用JWebBrowser。此类属于DJ项目。它需要执行swt jar。现在,我已经将Windows的swt jar包含到了应用程序的jar包中。我想知道如何在同一包装中包含Linux/Mac的swt jars?我正在使用Ant构建应用程序jar。我应该为不同的平台构建不同的swt jar并把它们放到jar中吗?
如果你想要一个可以在不同平台(Win/Mac/Linux/*nix)或架构(32/64位)上运行的单一构建,则可以将每个目标平台的SWT jar捆绑到安装程序中,然后在运行时动态加载正确的jar文件(或者在安装时让安装程序复制正确的SWT jar文件)。
例如,假设你想要支持32位和64位的Windows和Linux操作系统,则需要有以下SWT jar文件:
lib/swt_win_32.jar
lib/swt_win_64.jar
lib/swt_linux_32.jar
lib/swt_linux_32.jar
在你的Ant脚本/安装程序中包含所有这些文件(它们每个约为1.6MB),然后在运行时,在你的代码中使用Java系统属性来检测操作系统和架构
System.getProperty("os.name");
System.getProperty("os.arch");
构建正确的jar文件名称。
可以通过自定义类加载器或使用反射调用受保护方法URLClassloader.addURL(URL url)
来在运行时加载jar。
我已经将执行此任务的工作代码放在我的网站上:http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191
如果你能忍受代码气味,那么这是一个解决常见SWT问题的快速解决方案。
swt-gtk
软件包。以下是AppleCommander
的启动脚本的具体示例:java -Djava.library.path=/usr/lib/jni \
-cp /usr/lib/java/swt-gtk-3.5.1.jar:AppleCommander-1.3.5.8.jar \
com.webcodepro.applecommander.ui.AppleCommander -swt
这个答案包含了选择正确的SWT JAR文件来启动应用程序的代码:创建跨平台Java SWT应用程序
你只需要把所有的JAR文件放在正确的文件夹中,代码就会自动识别它们。