2013-02-15 43 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> 
相關問題