<target name="run" depends="jar">
<java fork="true" classname="${main-class}">
<classpath>
<path refid="classpath"/>
<path location="${jar.dir}/${ant.project.name}.jar"/>
</classpath>
</java>
</target>
为什么我不能使用像
这样的东西 <java jar="build/jar/HelloWorld.jar" fork="true" >
<classpath>
<path refid="classpath"/>
<path location="${jar.dir}/${ant.project.name}.jar"/>
</classpath>
</java>
我收到了错误
[java] java.lang.NoClassDefFoundError: org/apache/log4j/Logger [java] at oata.HelloWorld.(Unknown Source) [java] Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
答案 0 :(得分:4)
根据java
task documentation,您的第二个示例应该按预期工作(除了classpath
将被忽略)。
修改:您在问题中添加的信息意味着以下几点:
.jar
文件Main-Class
条目Class-Path
文件的正确log4j.jar
条目基本上java
ant任务与在命令行上使用java -jar
具有相同的要求:如果使用.jar
命令无法正确运行java -jar myApp.jar
文件然后,java
Ant任务将无法正常工作。
编辑2:无论何时直接在Java中调用.jar
文件,都无法以任何方式指定其他类路径。当您使用java -jar myApp.jar
时也是如此,当java
Ant任务与jar
属性一起使用时也是如此。这意味着.jar
文件本身必须具有正确的Class-Path
条目。
答案 1 :(得分:1)
然后,如果yopu有多个主类并且你没有清单中的条目,那么java将如何知道你打算运行哪个类名。使用classname属性来运行主类。