2013-02-15 41 views
0

我尝试从蚂蚁我的应用程序,该应用程序使用log4j的JAR 我现在有这个Ant任务:蚂蚁运行任务:【JAVA] java.lang.NoClassDefFoundError:组织/阿帕奇/ log4j的/记录器

<property name="main-class"  value="com.controller.core.Controller"/> 
<target name="dist" 
     description="generate the distribution" > 
    <jar jarfile="${dist}/lib/controller.jar" basedir="${build}"> 
     <manifest> 
      <attribute name="Main-Class" value="${main-class}"/> 
     </manifest> 
    </jar> 
</target> 
    <path id="class.path"> 
      <fileset dir="..\lib"> 
      <include name="**/*.jar" /> 
      </fileset>  
     </path> 
    <target name="run"> 
      <java jar="${dist}/lib/controller.jar" fork="true" >   
      <classpath refid="class.path" /> 
      <classpath> 
       <path location="../lib/misc"/> 
      </classpath> 
      </java>  
     </target> 

或我甚至把它完整的路径,但仍是同样的错误

<target name="run"> 
     <java jar="${dist}/lib/controller.jar" fork="true" >   
      <classpath> 
       <path refid="test.classpath"/> 
       <path location="d:\dev\svn\trunk\lib\misc\log4j.jar"/> 
      </classpath>  
     </java> 
</target> 

其中log4j的是在../lib/misc路径。 但还是即时收到此错误:

run: 
    [java] java.lang.NoClassDefFoundError: org/apache/log4j/Logger 
    [java]  at com.controller.core.Controller.<clinit>(Unknown Source) 
    [java] Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger 
    [java]  at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    [java]  at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    [java]  at java.security.AccessController.doPrivileged(Native Method) 
    [java]  at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    [java]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    [java]  ... 1 more 
    [java] Exception in thread "main" 
    [java] Java Result: 1 

现在,当我与-v标志运行ant它给了我这个消息:

[java] When using 'jar' attribute classpath-settings are ignored. See the manual for more information. 
    [java] Executing 'c:\Program Files (x86)\Java\jdk1.7.0_05\jre\bin\java.exe' with arguments: 
    [java] '-classpath' 
    [java] 'd:\dev\svn\trunk\lib\misc\log4j.jar' 
    [java] '-jar' 
    [java] 'D:\dev\svn\trunk\controller\dist\lib\controller.jar' 

什么我错过这里?

+0

您的元素不嵌套在任务下。它应该看起来像: 2013-02-15 15:05:04

+0

我修复了这个问题,但同样的错误 – user63898 2013-02-15 15:21:56

+0

我相信你必须使用Ant的-lib命令行选项来指定log4j库:ant run -lib d:\ dev \ svn \ trunk \ lib \ misc \ log4j.jar。请参阅http://ant.apache.org/faq.html#delegating-classloader。 – 2013-02-15 15:33:33

回答

5

就像它说的那样:当使用jar属性时,提供的classpath被忽略,因为jar文件会覆盖它。蚂蚁手动链接到的java文档说:

When you use this option [-jar], the JAR file is the source of all user classes, and other user class path settings are ignored.

相反,将jar包括在classpath中,并使用classname属性。例如,

<java classname="${main-class}" fork="true" >   
    <classpath> 
    <path refid="class.path" /> 
    <pathelement location="../lib/misc"/> 
    <pathelement location="${dist}/lib/controller.jar"/> 
    </classpath> 
</java> 
相关问题