java - 无法使用 ant 从 jar 启动 main()

标签 java eclipse ant build jar

我有一个项目,例如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/

相关文章:

java - tools.jar 丢失 - 但仅在第一次调用时(Tomcat 8/Java 8/Axis)

每行都有 Java Eclipse 错误

html - 如何更改eclipse html格式

eclipse - 如何在 Eclipse 中使用 subclipse

java - 为什么 Ant 编译的 Java 源代码的目标 Java 版本具有未定义的方法

ant - 在 Ant <tar> 任务中排除 .git

ant - 使用 IDEA 中的 Ant 在新窗口中执行命令

java - Proguard混淆后如何保留@PathVariable参数名称

java - Spring Web 应用程序上的 Hibernate 集成

java - 在按钮上显示 float