2011-02-25 78 views
1
<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> 

为什么我不能用类似为什么我必须在ANT中使用classname?

<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

你有没有尝试**第二个例子?结果是什么? – 2011-02-25 07:36:54

+0

[java] java.lang.NoClassDefFoundError:org/apache/log4j/Logger [java] at oata.HelloWorld。 (未知来源) [java]引起来自:java.lang.ClassNotFoundException:org.apache.log4j.Logger – user496949 2011-02-25 07:40:16

回答

4

按照java task documentation,按照预期的第二个例子应该只是工作(除了classpath会忽略)。

编辑:您添加到你的问题中的信息意味着几件事情:

  1. .jar文件中发现
  2. 它已经在其清单
  3. 您的应用程序正确Main-Class项要求的log4j
  4. 它确实不是有一个正确的Class-Path条目指向一个log4j.jar fi乐

基本上java Ant任务具有相同的要求在命令行中使用java -jar:如果您.jar文件不能正常运行在命令行中使用java -jar myApp.jar,那么java Ant任务将不会像正常工作那也是。

编辑2:每当您直接在Java中调用.jar文件时,就无法以任何方式指定进一步的类路径。当您使用java -jar myApp.jar时,情况也是如此,当您将java Ant任务与jar属性一起使用时也是如此。这意味着.jar文件本身必须具有正确的Class-Path条目。

+0

如果您有清单中的入口ponit! – Hurda 2011-02-25 07:22:41

+1

@Hurda:暗示“如预期”;-) – 2011-02-25 07:23:16

+0

使用jar,系统报告错误。找不到其他罐子。 – user496949 2011-02-25 07:38:44

1

然后,如果yopu拥有多个主类并且您没有清单中的条目,java将如何知道您打算运行哪个类名。使用classname属性来运行你的主类。

+0

如果您仍然面临执行主类的问题,请在您的classname属性中明确提及它,否则我的main-class:oata.HelloWorld在jar – user496949 2011-02-25 07:34:26

+0

中定义。 – BOSS 2011-02-25 07:38:20

+0

将log4j.jar添加到您的类路径中。它试图查找记录器类。 – BOSS 2011-02-25 07:44:08

相关问题