我在一个swing应用程序中使用JWebBrowser。本课程属于DJ项目。它需要swt jar来执行。现在,我已经将用于windows的swt jar包含到应用程序的jar包中。我想知道如何在相同的包装中包含linux/mac的swt jar ?我正在使用ant构建应用程序jar。我应该为不同的平台构建不同的swt jar吗?
如果你想在不同的平台(Win/Mac/Linux/*nix)或体系结构(32/64位)上运行单个构建,那么你可以将每个目标平台的SWT jar与安装程序捆绑在一起,然后在运行时动态加载正确的SWT 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文件名。
在运行时加载jar可以通过自定义类加载器或使用反射调用受保护的方法URLClassloader.addURL(URL url)
来执行。
我已经把工作代码来执行这个确切的任务在我的网站:http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191
如果你能忍受代码气味,那么它是一个非常常见的SWT问题的快速解决方案。
在Mac OS +X上,可以将所需的JAR和JNI库合并到一个应用程序包中,如本项目所示。参见在Mac OS X上部署SWT应用程序。
在Linux上,大多数平台都提供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的代码:
你所需要做的就是把所有的jar放到正确的文件夹中,代码就会把它们捡起来。