我有一个项目,例如A,并且其构建路径中包含一个jar,例如a。该 jar 包含一个 main 方法,其类名在 Manifest 文件中提供。
从A的build.xml中,我使用如下代码调用jar文件:
<java jar="lib/a.jar" fork="true">
<arg value="test param" />
</java>
list 文件指向:myframework.Startup
当我尝试运行 ant 文件时,我得到:
[java] java.lang.NoClassDefFoundError: org/apache/log4j/Logger
[java] at myframework.Startup.<clinit>(Startup.java:40)
[java] Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
[java] at java.net.URLClassLoader$1.run(Unknown Source)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at java.net.URLClassLoader.findClass(Unknown Source)
[java] at java.lang.ClassLoader.loadClass(Unknown Source)
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
[java] at java.lang.ClassLoader.loadClass(Unknown Source)
[java] at java.lang.ClassLoader.loadClassInternal(Unknown Source)
[java] ... 1 more
[java] Could not find the main class: myframework.Startup. Program will exit.
[java] Exception in thread "main"
[java] Java Result: 1
<小时/>
但是当我直接从编辑器 Eclipse 运行 jar 文件时,即右键单击 a.jar-> 运行方式 -> Java 应用程序,它运行良好。
请帮忙。
最佳答案
你有两个选择。更改您的 java 任务以在类路径中包含 log4j:
<java classname="${jar.main.class}" fork="true">
<classpath>
<fileset dir="lib" includes="*.jar"/>
</classpath>
<arg value="test param" />
</java>
或者更新 jar 的 list 以包含“Class-Path”指令:
<jar destfile="${jar.file}" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${jar.main.class}" />
<attribute name="Class-Path" value="lib/a.jar lib/log4j.jar .. .." />
</manifest>
</jar>
可执行 jar 必须包含主类和类路径。
有关详细信息,请参阅以下答案:
关于java - 无法使用 ant 从 jar 启动 main(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19515131/