无法用swtjar制作ant脚本

时间:2012-02-02 05:19:16

标签: java ant jar cross-platform swt

我正在尝试创建一个使用SWT作为其GUI的程序的跨平台.jar。我偶然发现了thisthis,并尝试在我自己的程序中使用它。我对ant脚本不是很熟悉,而且这个程序在构建路径中有很多其他.jars,所以我用eclipse生成了一个ant build脚本,我修改了它包含swtjar任务。但是,当脚本运行并进入swtjar任务时,它会失败并显示The archive swtjar.jar doesn't exist。我还试图提前制作一个合法的构建文件,但也遇到了这个错误。有什么我想念的吗?我在构建路径中包含了swtjar.jar,在脚本顶部包含了taskdef。

这是脚本:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project kEllyIRClient">
<!--this file was created by Eclipse Runnable JAR Export Wizard-->
<!--ANT 1.7 is required-->

<taskdef name="swtjar" classname="org.swtjar.ant.SWTJarTask"
                       classpath="./libs/swtjar.jar"/>

<target name="create_run_jar">

    <!--make the release directory if it doesn't exist-->
    <mkdir dir="./release/"/>

    <!--Create a temporary jar file with all the dependencies (i.e. the libs folder)-->
    <jar jarfile="./release/externalLibsTemp.jar">
      <zipgroupfileset dir="./libs/">
        <exclude name="swt/*swt*.jar"/>
        <exclude name="swtjar.jar"/>
        <include name="**/*.jar"/>
      </zipgroupfileset>
    </jar>

    <!--package with swt-->
    <swtjar jarfile="./release/KEllyIRC.jar" targetmainclass="shared.Initializer" swtversion="3.7.1">
        <fileset dir="./bin"/>
        <!--Add the dependencies jar to the jar, but exclude the meta-inf/manifest stuff
        cause that screws stuff up.-->
        <zipfileset excludes="META-INF/*.SF" src="./release/externalLibsTemp.jar" />
        <fileset dir="./libs/swt/" includes="swt-win32-3.7.1.jar"/>
    </swtjar>

    <!--Delete temporary file-->
    <delete file="./release/externalLibsTemp.jar"/>

</target>

这就是错误:

D:\My Dropbox\Java\kEllyIRClient\swtjar-buildV2.xml:24: The archive swtjar.jar doesn't exist

2 个答案:

答案 0 :(得分:2)

我留下了一条评论,询问运行此蚂蚁目标的输出。

与此同时,您错误地将swt罐包括在内并且名称错误。您正在使用:

<zipfileset excludes="META-INF/*.SF" src="./libs/swtjar.jar"/>
<zipfileset excludes="META-INF/*.SF" src="./libs/org.eclipse.swt.win32.win32.x86_3.7.1.v3738a.jar"/>
  • 您不需要包含swtjar - 目标会自动为您执行此操作。但是,我怀疑这是不适合你的步骤。
  • 您还需要以“swt-&lt; platform&gt;&lt; bitness&gt; - 。jar”格式命名您的swt jar。因此,在您的情况下,您需要将“org.eclipse.swt.win32.win32.x86_3.7.1.v3738a.jar”重命名为“swt-win32-3.7.1.jar”。
  • 您不应该使用zipfileset
  • 包含swt jar

您的重命名的SWT jar应包括如下。

<!-- SWT Jars -->
<fileset dir="./libs" includes="swt-win32-3.7.1.jar" />

swtjar网站已经涵盖了大部分内容:http://mchr3k.github.com/swtjar/

答案 1 :(得分:0)

我知道这是一个非常古老的问题,但我找到了一个对我有用的解决方案,但它可能对每个人都没有帮助。你看,SWTJar讨厌空间。

我的意思是,您的目录路径中不能包含空格。否则,SWTJar会错误地解析路径,如下所示(我的旧jar脚本输出):

[swtjar] /Users/generaluse/Documents/javagame/eclipse/FlippyChat 20MSG/swt/swtjar.jar
BUILD FAILED
/Users/generaluse/Documents/javagame/eclipse/FlippyChat MSG/build.xml:42: The archive swtjar.jar doesn't exist

请注意[swtjar]之后的部分(由swtjar生成):

/FlippyChat 20MSG/

与ant生成的BUILD FAILED

/FlippyChat MSG/

由于SWTJar添加20,它看起来在错误的地方,并且找不到它的罐子。

mchr,如果您正在读这篇文章,可以解决它吗?

与此同时,我建议使用连字符( - )或下划线(_)而不是空格。无论如何,这是编程标准。