2013-09-05 3 views
0

빌드를 사용하여 실행 가능한 jar 파일을 만들었습니다. 여기 jar 파일을 실행할 수 없습니다. NoClassDefFoundError 얻기

<target name="deploy" depends="compile"> 
<jar jarfile="${deploy.home}/${app.name}.jar" basedir="${build.home}"> 
<manifest> 
<attribute name="Main-Class" value="abc.xyz"/> 
</manifest> 
</jar> 

XYZ 호가 전체 프로그램을 실행하기위한 주요 방법이있다 ..

public static void main(String[] args) { 
     File buildFile = new File("build.xml"); 
     Project p = new Project(); 
     p.setUserProperty("ant.file", buildFile.getAbsolutePath()); 
     p.init(); 
     ProjectHelper helper = ProjectHelper.getProjectHelper(); 
     p.addReference("ant.projectHelper", helper); 
     helper.parse(p, buildFile); 
     p.executeTarget(p.getDefaultTarget()); 
} 

JAR 파일이 생성되고 successfuly. 발견되지

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/Project 
     at abc.xyz.main(xyz.java:20) 
Caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.Project 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 

프로젝트 클래스 - 나는 등 java -jar appname.jar을 실행하면 예외를 던지고있다. 거기에 ant.jar.

하지만 난 그 작업을 잘 ABC 명령 프롬프트 자바에 단순히으로 abc.java 클래스를 실행할 때.

나를 기쁘게 도와주세요. 및 그 해결책. 하나 개 이상의 용기가 필요한 경우 항아리

<target name="deploy" depends="compile"> 
<jar jarfile="${deploy.home}/${app.name}.jar" basedir="${build.home}"> 
<manifest> 
<attribute name="Main-Class" value="abc.xyz"/> 
<attribute name="Class-Path" value="ant.jar"/> 
</manifest> 
</jar> 

의 클래스 경로에

+1

설명해 주시겠습니까? 그러나 xyz.java 클래스를 명령 프롬프트에서 간단히 실행하면 Java abc.java가 작동합니다. 두 클래스가 있습니까? 서로 전화하는거야? 두 가지 클래스의 전체 코드를 게시 할 수 있습니까 (재미없는 부분은 생략 함) 패키지 선언을 확인해야합니다 – Gianmarco

+1

app-jar의 매니페스트에 선언 된 클래스 경로에 필수 라이브러리를 추가해야합니다. 응용 프로그램에 ant.jar이 필요한 경우 Java에 대해 알려야합니다. – Holger

+0

Gianmarco에게 감사합니다. 오타 에러였습니다. 나는 편집했습니다. 오직 하나의 메인 클래스입니다. 패키지 문제가 없습니다. 일식에 그 일하는 벌금. – smriti

답변

0

추가 필요한 라이브러리는 공백으로 구분해야합니다.

+0

경로는 매니페스트를 포함하는 응용 프로그램 Jar의 위치에 상대적이어야합니다. 따라서 배포하려는 디렉토리 구조를 알아야합니다. 다른 환경에서 실행될 수 있도록 응용 프로그램을 배포하려는 경우 항상 절대 경로를 피하십시오. – Holger

+0

홀거 - 안녕하세요. 하지만 미안해. 여전히 같은 오류. 하지만 매니 페스트 파일에서 클래스가 상대적으로 추가 된 것을 볼 수 있습니다. app.jar에 lib 폴더를 포함해야합니까? 도움을 주셔서 감사합니다. – smriti

+0

참조 된 라이브러리가 그 안에없는 * app.jar에 상대적이어야합니다. – Holger

관련 문제