我是Ant构建文件的新手,我已经设法建立我的构建文件来创建我的构建目录结构,编译我的所有文件,并将它们装入一个带有清单正确指定主类的jar中.
但是,我也试图在buildfile中添加运行我刚刚创建的jar的功能.它会尝试运行,但我遇到了这个错误:
run: [java] Exception in thread "main" java.lang.NoClassDefFoundError: edu/course/lab/pkg3/Lab31 [java] at edu.school.oad.lab.pkg1.Main.<init>(UnkNown Source) [java] at edu.school.oad.lab.pkg1.Main.main(UnkNown Source) [java] Caused by: java.lang.classNotFoundException: edu.course.antlab.pkg3.Lab31 [java] at java.net.urlclassloader$1.run(urlclassloader.java:202) [java] at java.security.AccessController.doPrivileged(Native Method) [java] at java.net.urlclassloader.findClass(urlclassloader.java:190) [java] at java.lang.classLoader.loadClass(ClassLoader.java:307) [java] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) [java] at java.lang.classLoader.loadClass(ClassLoader.java:248) [java] ... 2 more [java] Java Result: 1
所以我知道这意味着当我尝试运行jar文件时,jar文件的结构正确并且清单设置正确,但它找不到类Lab31,因为它没有包含在该特定的jar文件中.相反,它包含在我的库文件夹中的另一个jar文件中./lib/.我尝试使用相同的方法设置运行jar文件的类路径,就像我为实际编译设置类路径一样,但这似乎不起作用.
这是我对构建文件的运行部分所拥有的:
<target name="run" depends="init,prepare"> <java jar="${build}/jar/AntLabRun.jar" fork="true"> <classpath> <pathelement location="${lib}/resources.jar" /> </classpath> </java> </target>
我唯一的想法是jar文件认为resources.jar文件位于${build} / jar / ${lib} /resources.jar而不仅仅是${lib} /resources.jar,但如果这是我仍然不确定如何解决它.有人可以提供一些指导吗?
解决方法
java任务的行为可能与java命令行的行为相同.当给出jar和classpath选项时,将忽略类路径,而jar应该包含列出所需库的清单.我建议删除jar属性,将两个jar指定为classpath元素,并将classname属性添加到具有主类名称的java任务中.