在Ant构建中引用外部库

时间:2009-03-06 22:01:14

标签: java ant

我们为一个正在为PDA开发的项目提供了一个ant构建脚本。在eclipse中,我们有一堆引用的库,我知道如何在PDA上运行jar时让它们工作,因为我们有一个.lnk文件,只需添加以下内容即可添加外部库:

512#"\J9\PPRO11\bin\j9.exe" -jcl:ppro11 -cp "\dist\WiFiTest.jar;\placelab\lib\placelab.jar" j2medemo.wifi.WiFiTest

在-cp参数后添加我们需要的任何库。但是,我不知道如何在ant文件中复制它(不知道实际上是夸张但是在阅读了所有文档之后我不理解它)。

我们有以下内容。

<target name="jar" depends="prepare">
 <delete file="${dist}/${appname}.jar"/>
 <delete file="${dist}/MANIFEST.MF"/>
 <manifest file="${dist}/MANIFEST.MF">
    <attribute name="Built-By" value="${user.name}"/>
    <attribute name="Main-Class" value="j2medemo.GUI.MapPanel"/>
</manifest>
<jar destfile="${dist}/${appname}.jar"
     basedir="${classes}"
     includes="**/*.class, **/*.jpg, **/*.gif,**/*.png,**/*.xml"
     manifest="${dist}/MANIFEST.MF"
     />
</target>

我尝试过添加我能想到的任何地方,但它没有帮助。我可以将它添加到包含部分吗?

其次,我们有一个运行目标:

<target name="run" description="run" depends="jar">
    <exec dir="${j9bin}" executable="${j9bin}\j9.exe">
        <arg line="-jcl:ppro11 -cp '${dist}\${appname}.jar;placelab\lib\placelab.jar' ${mainclass}"/>
        <env key="JAVA_HOME" path="${j9home}"/>
    </exec>
</target>

我想改变它来运行另一个类,所以我创建了以下两个目标:

<target name="jarSAX" depends="prepare">
 <delete file="${dist}/SAXParse.jar"/>
 <delete file="${dist}/MANIFEST.MF"/>
 <manifest file="${dist}/MANIFEST.MF">
    <attribute name="Built-By" value="${user.name}"/>
    <attribute name="Main-Class" value="j2medemo.Routes.SAXParse"/>
</manifest>
<jar destfile="${dist}/SAXParse.jar"
     basedir="${classes}"
     includes="**/*.class, **/*.jpg, **/*.gif,**/*.png,**/*.xml"
     manifest="${dist}/MANIFEST.MF"
     />
</target>

<target name="runSAXParser" description="run" depends="jarSAX">
        <exec dir="${j9bin}" executable="${j9bin}\j9.exe">
            <arg line="-jcl:ppro11 -cp '${dist}\SAXParse.jar' j2medemo.Routes.SAXParse"/>
            <env key="JAVA_HOME" path="${j9home}"/>
        </exec>
    </target>

但是如果我尝试运行它,我会收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: j2medemo.Routes.SAXParse

如果有人对任何最有帮助的问题有任何想法/解决方案。

1 个答案:

答案 0 :(得分:3)

据我所知,您需要将classpath元素添加到清单中。应该看起来像这样:

 <manifest file="${dist}/MANIFEST.MF">
    <attribute name="Built-By" value="${user.name}"/>
    <attribute name="Main-Class" value="j2medemo.Routes.SAXParse"/>
    <attribute name="Class-Path" value="WiFiTest.jar;placelab.jar"/>
 </manifest>

类路径条目应该相对于distributable中Jar的位置。从那里,您应该能够直接执行jar(使用-jar命令行选项,我不确定这对于J9是什么)。应该类似于类似的Java调用:

java -jar MainJar.jar