2011-02-25 4 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> 

나는 java task documentation에 따르면 내가ANT에서 classname을 사용해야하는 이유는 무엇입니까?

 
[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

실제로 두 번째 예제를 시도 했습니까 **? 그 결과는 무엇입니까? –

+0

[java] java.lang.NoClassDefFoundError : org/apache/log4j/Logger [java] at oata.HelloWorld. (알 수없는 출처) [java] 발생 원인 : java.lang.ClassNotFoundException : org.apache.log4j.Logger – user496949

답변

4

같은 오류가 발생

<java jar="build/jar/HelloWorld.jar" fork="true" > 
      <classpath> 
      <path refid="classpath"/> 
      <path location="${jar.dir}/${ant.project.name}.jar"/> 
    </classpath> 
    </java> 

같은 것을 사용할 수없는 이유는 예상대로 두 번째 예는 단지 classpath이 될 것 제외 (작동합니다 무시 됨).

편집 :

.jar 파일이 발견
  1. 이 매니페스트
  2. 응용 프로그램에서 올바른 Main-Class 항목의 log4j를 필요로하고있다 : 당신이 당신의 질문에 대한 추가 정보는 몇 가지 의미
  3. 아니요log4j.jar fi를 가리키는 올바른 Class-Path 항목을 가지고 있습니다. 제작 :

는 기본적으로 java 개미 작업은 명령 줄에서 java -jar를 사용하는 것과 같은 요구 사항이 있습니다 : 당신의 .jar 파일이 제대로 다음 java 개미 작업처럼 작동하지 않습니다, 명령 줄에 java -jar myApp.jar을 사용하여 실행하지 않는 경우 그것도.

편집 2 :.jar 파일을 Java에서 직접 호출 할 때마다 어떤 classpath도 지정 될 수 없습니다. java -jar myApp.jar을 사용할 때 마찬가지이고 java Ant 태스크를 jar 특성과 함께 사용하는 경우에도 마찬가지입니다. 즉, .jar 파일 자체에 올바른 Class-Path 항목이 있어야합니다.

+0

매니페스트에 항목이있는 경우! – Hurda

+1

@Hurda : 이는 "예상대로"암시됩니다. –

+0

병을 사용하면 시스템에서 오류를보고합니다. 다른 항아리를 찾을 수 없습니다. – user496949

1

그러면 yopu에 두 개 이상의 메인 클래스가 있고 매니페스트에 항목이없는 경우 실행할 클래스 이름을 어떻게 알 수 있습니까? mainname을 실행하려면 classname 속성을 사용하십시오.

+0

Main-Class : oata.HelloWorld는 기본 클래스를 실행하는 데 여전히 문제가있는 경우 jar 파일 – user496949

+0

에 정의되어 있으므로 명시 적으로 classname 특성에 언급하십시오. – BOSS

+0

클래스 경로에 log4j.jar를 추가하십시오. 로거 클래스를 찾으려고합니다. – BOSS

관련 문제