我们为一个正在为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
如果有人对任何最有帮助的问题有任何想法/解决方案。
答案 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