2014-12-13 4 views
2

bnd 실행 프로그램을 실행하는 데 문제가 있습니다. 실제 문제는 gradle을 사용하여 빌드하는 동안 발생했지만 병을 직접 호출해도 작동하지 않습니다. Launcher 클래스는 실제로 해당 jar 파일에 존재하며 main 메소드를 가지고 있습니다. 누구나 왜이 오류가 발생했는지 알 수 있습니까?존재하는 동안 주 클래스를 찾을 수 없습니다.

$ java -cp cnf/cache/biz.aQute.launcher/biz.aQute.launcher-1.4.0.jar aQute.launcher.Launcher 
Error: Could not find or load main class aQute.launcher.Launcher 

jar의 내용을 읽을 때 Launcher 클래스가 실제로 있음을 알 수 있습니다.

$ jar tvf cnf/cache/biz.aQute.launcher/biz.aQute.launcher-1.4.0.jar 
    1490 Fri Sep 26 06:49:00 CEST 2014 META-INF/MANIFEST.MF 
     ... 
    1586 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$1.class 
    2270 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$2.class 
    794 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$3.class 
    1133 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$4.class 
    1100 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$5.class 
    1260 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$AllPermissionCollection.class 
    1149 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher$AllPolicy.class 
37566 Fri Sep 26 06:49:00 CEST 2014 aQute/launcher/Launcher.class 
     ... 

또 다른 임의의 jar 파일에서 다른 임의의 클래스를로드하려고 시도했지만 작동하지 않습니다. main 메서드가없는 경우에만 다른 오류가 발생합니다 (클래스에서 Main 메서드를 찾을 수 없음).

또한이 모든 파일에 대한 권한이 동일합니다. 그렇지 않으면 'jar tvf'도 실행할 수 없습니다.

그래서 어떤 아이디어입니까?

+0

jar에는 필요한 모든 클래스가 포함되어 있습니까? 발견되지 않은 다른 클래스를 요구하는 클래스는 이와 같은 오류를 유발할 수 있습니다. –

+0

전체 스택 추적을 게시하십시오. –

+0

스택 추적이 없습니다. 이 메시지 만. Java에 -verbose 옵션을 추가하면 rt.jar에서로드되는 클래스 만 표시됩니다. – Marc

답변

1

해결책을 찾았습니다. 의존성을 놓친 것 같지만 OSGi 프레임 워크였습니다. 클래스 패스에 펠릭스 프레임 워크를 추가했을 때 시작되었습니다. 분명히 Launcher 클래스는 OSGi 프레임 워크의 인터페이스를 구현하며이 클래스를 찾을 수 없을 때 클래스를로드하지 않습니다. 이것은 자바 런타임에 대한 개선 일 수 있습니다 (주로 자세한 출력은이 문제를 언급 할 수 있습니다).

이제는 bnd가 프레임 워크와 함께 시작 프로그램을 시작하려고하지만이 질문은 내가 묻는 것입니다.