Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Ant构建多平台SWT应用程序_Java_Ant_Build_Jar_Swt - Fatal编程技术网

Java 使用Ant构建多平台SWT应用程序

Java 使用Ant构建多平台SWT应用程序,java,ant,build,jar,swt,Java,Ant,Build,Jar,Swt,我正在编写一个可以在Windows(32/64位)和MacOSX(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-x

我正在编写一个可以在Windows(32/64位)和MacOSX(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 JAR。我希望这是依靠第三方库发布代码的正确方法。)


谢谢大家。

我试着这样做:我安装了Ant Contrib任务,因为它支持
if
语句。我已经修改了构建文件以用于检测操作系统平台和体系结构

编译时,它使用我的
lib.dir
中的所有4个SWT Jar,但编译后,它只将必要的SWT 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>


到目前为止,这似乎有效。我将对其进行更多测试并添加注释。

您是否检查了以下链接:。第二个链接中提到了定制Ant任务。你查过了吗?嗨,法沃纽斯。这些链接看起来很有用。我会详细地看一遍。我已使用另一个修复程序来解决此问题。我的答案如下。你对这种方法有什么看法?谢谢。您说编译时,它使用了我lib.dir中的所有4个SWT JAR。我能感觉到的问题是,您可能会选择一个与目标机器不兼容的版本(取决于您在类路径中提到它们的顺序)。例如,为macosx选择一个win32 jar,或为win32选择一个win64 jar,这是有道理的。我将试验文件的顺序及其效果,并在这里发布。