我正在编写一个可以在Windows(32/64位)和Mac OSX(32/64位)上使用的SWT应用程序。
除了JRE,我依靠这里的SWT库。根据我的目标平台,我可以找到四个版本的 SWT 库(如上所述)。
构建应用程序时,如何使用正确的 SWT Jar 进行编译?如果可能的话,我想尽量避免对 Jar 版本、平台和架构进行硬编码。SWT罐子是这样命名的:
- SWT-win32-x86_64.jar
- SWT-win32-x86_32.jar
- SWT-macOSX-x86_32.jar
- SWT-macOSX-x86_64.jar
(我的项目将是一个开源项目。我希望人们能够下载源代码并构建它,因此我想到在源代码分发中包含所有四个版本的 SWT Jars。我希望这是发布依赖于第三方库的代码的正确方法。
谢谢大家。
我试图像这样完成它:我已经安装了 Ant Contrib 任务,因为它支持 if
语句。我修改了用于检测操作系统平台和体系结构的构建文件。
编译时,它使用我lib.dir
中的所有 4 个 SWT Jar,但在编译后,它只将必要的 SWT Jar 复制到我的构建目录中。我想这将使我的最终 ZIP 大小比保留所有四个 JAR 小得多。
<target name="copy" depends="compile">
<if>
<os family="windows"/>
<then>
<exec dir="." executable="cmd" outputproperty="command.ouput">
<arg line="/c SET ProgramFiles(x86)"/>
</exec>
<if>
<contains string="${command.ouput}" substring="Program Files (x86)"/>
<then>
<copy file="${lib.dir}/swt-win32-x86_64.jar" tofile="${jar.dir}/SWT.jar"/>
</then>
<else>
<copy file="${lib.dir}/swt-win32-x86_32.jar" tofile="${jar.dir}/SWT.jar"/>
</else>
</if>
</then>
<elseif>
<os family="unix"/>
<then>
<exec dir="." executable="/bin/sh" outputproperty="command.ouput">
<arg line="/c uname -m"/>
</exec>
<if>
<contains string="${command.ouput}" substring="_64"/>
<then>
<copy file="${lib.dir}/swt-macosx-x86_64.jar" tofile="${jar.dir}/SWT.jar"/>
</then>
<else>
<copy file="${lib.dir}/swt-macosx-x86_32.jar" tofile="${jar.dir}/SWT.jar"/>
</else>
</if>
</then>
</elseif>
</if>
</target>
到目前为止,这似乎有效。我将对其进行更多测试并添加评论。