2012-11-21 3 views
1

나는 개미로 프로젝트를 구성하기 위해 노력하고있어이 내가 무엇을 얻을 아니라 :NoClassDefFoundError를

 D:\Dropbox\EclipseWorkspace\PIRS_Arturas_Masaitis\src\lib>dir 
    Volume in drive D is WinMedia 
    Volume Serial Number is 8ED9-B662 

    Directory of D:\Dropbox\EclipseWorkspace\PIRS_Arturas_Masaitis\src\lib 

    2012.11.20 16:11 <DIR>   . 
    2012.11.20 16:11 <DIR>   .. 
    2012.10.16 22:03   315.805 commons-lang3-3.1.jar 
    2012.10.23 23:08   176.897 commons-validator-1.4.0.jar 
    2012.11.20 15:30 <DIR>   hibernate 
    2012.11.16 04:48   253.160 junit-4.10.jar 
    2012.10.22 02:02   489.883 log4j-1.2.17.jar 
    2012.10.31 23:00   1.581.066 mockito-all-1.9.5.jar 
    2012.11.02 19:54   651.643 mybatis-3.1.1.jar 
    2012.11.01 04:37   832.960 mysql-connector-java-5.1.22-bin.jar 
        7 File(s)  4.301.414 bytes 
        3 Dir(s) 7.277.907.968 bytes free 

    D:\Dropbox\EclipseWorkspace\PIRS_Arturas_Masaitis\src\lib>cd ../.. 

    D:\Dropbox\EclipseWorkspace\PIRS_Arturas_Masaitis> 
    D:\Dropbox\EclipseWorkspace\PIRS_Arturas_Masaitis> 
    D:\Dropbox\EclipseWorkspace\PIRS_Arturas_Masaitis>ant run 
    Buildfile: D:\Dropbox\EclipseWorkspace\PIRS_Arturas_Masaitis\build.xml 

    init: 

    compile: 
     [javac] Compiling 1 source file to D:\Dropbox\EclipseWorkspace\PIRS_Arturas_ 
    Masaitis\build 

    jar: 
      [jar] Building jar: D:\Dropbox\EclipseWorkspace\PIRS_Arturas_Masaitis\dist 
    \jar\PIRS_Arturas_Masaitis.jar 

    run: 
     [java] Exception in thread "main" java.lang.NoClassDefFoundError: org/apach 
    e/log4j/Logger 
     [java]  at com.nortal.pirs.userinterface.fakestarter.FakeUserInterface.< 
    init>(Unknown Source) 
     [java]  at com.nortal.pirs.userinterface.fakestarter.FakeUserInterface.m 
    ain(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]  ... 2 more 
     [java] Java Result: 1 

    BUILD SUCCESSFUL 
    Total time: 2 seconds 

D:\Dropbox\EclipseWorkspace\PIRS_Arturas_Masaitis> 

그럼 먼저 내가/lib에와있는 폴더 SRC에서의 log4j를 볼 수 있습니다 두 번째 부분은 런타임에 찾을 수 없다는 것을 알 수 있습니다. 꽤 이상하게도 컴파일되기 때문에 런타임에 찾을 수없는 것 같습니다.

내 build.xml 파일 :

<?xml version="1.0" encoding="UTF-8"?> 
<project name="PIRS" default="dist" basedir="."> 
    <description>PIRS Arturas Masaitis</description> 
    <property name="src" location="src"/> 
    <property name="build" location="build"/> 
    <property name="dist" location="dist"/> 
    <property name="lib.dir" location="src/lib"/> 

    <path id="classpath">   
     <fileset dir="${lib.dir}" includes="**/*.jar"/> 
     <fileset dir="${lib.dir}" includes="*.jar"/> 
    </path> 

    <target name="init"> 
     <mkdir dir="${build}"/> 
    </target> 

    <target name="compile" depends="init"> 
     <javac includeantruntime="false" srcdir="${src}" destdir="${build}"> 
     <classpath> 
      <path refid="classpath"/> 
     </classpath> 
     </javac> 
    </target> 

    <target name="jar" depends="compile" description="generate the jar"> 
     <mkdir dir="${dist}/jar"/> 
     <jar destfile="${dist}/jar/PIRS_Arturas_Masaitis.jar" basedir="${build}"> 
      <manifest> 
       <attribute name="Main-Class" value="com.nortal.pirs.userinterface.fakestarter.FakeUserInterface"/> 
      </manifest> 
     </jar> 
    </target> 

    <target name="clean" description="clean up" > 
     <delete dir="${build}"/> 
     <delete dir="${dist}"/> 
    </target> 

    <target name="run" depends="jar"> 
     <java jar="${dist}/jar/PIRS_Arturas_Masaitis.jar" fork="true"> 
     <classpath refid="classpath"/> 

     </java> 
    </target> 

</project> 

이 실제로 라인이 아무것도 변경하지 않는 것.

음, 그것에 대한 아이디어가 있습니까? 미리 감사드립니다.

+1

classpath as 속성은 한 번 설정되고 할당을받지 않을 수 있습니다. 속성, 클래스 경로 등의 정보를 쓰는 -debug를 사용하여 ant를 실행 해보십시오. – Jayan

답변

0

여기에서 일반적인 문제가 발생했습니다 : java -jar ... 명령을 사용하여 무언가를 실행하면 -classpath ... 속성이 삭제됩니다. 그 이유는 보안입니다. Jar 파일은 수정되지 않았 음을 보증하기 위해 디지털 서명이 가능하고 java은 같은 내용이지만 하이재킹 된 기능을 가진 다른 종속성 Jar 파일을로드하기가 쉽습니다.

해결책은 간단합니다. 파일에 Class-Path: ... 속성도 포함 시키십시오 (처럼).

관련 문제