我是Ant构建文件的新手,我设法设置了构建文件来创建构建目录结构,编译所有文件,然后将它们添加到带有正确指定主类的清单的jar中。
但是,我还试图将可运行我刚创建的jar的功能放入buildfile中。它将尝试运行,但是我遇到此错误:
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,但是如果那是案例我仍然不确定如何解决。谁能提供一些指导?
Java任务的行为方式可能与Java命令行相同。如果同时给出了jar和classpath选项,则将忽略classpath,而是希望jar包含清单,该清单列出了所需的库。我建议删除jar属性,将两个jar都指定为classpath元素,然后将该classname
属性添加到具有主类名称的java任务中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句