【发布时间】:2011-07-05 10:48:34
【问题描述】:
我是 Ant 构建文件的新手,我已经成功地设置了构建文件来创建构建目录结构、编译所有文件并将它们 jar 到一个带有正确指定主类的清单的 jar 中。
但是,我还尝试将运行我刚刚创建的 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 文件中。相反,它包含在我的库文件夹 ./lib/ 中的另一个 jar 文件中。我尝试使用与为实际编译设置类路径相同的方法来设置运行 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,但是如果是这样的话,我仍然不确定如何解决它。任何人都可以提供一些指导吗?
【问题讨论】: