2009-11-21 3 views
4

ec/mobat/lib/에있는 일부 jar에 따라 ec/mobat/MOBAT.jar 항아리를 실행하려고합니다. 그것은 내가 할 경우 작동합니다다른 디렉토리에서 jar를 실행하면 필요한 종속성을 찾을 수 없습니다.

ec/mobat/$ java -jar MOBAT.jar 

그러나 나는 다른 디렉토리

ec/$ java -jar mobat/MOBAT.jar 

에서 항아리를 실행할 수 싶어하지만 난이 통과하려고

java.lang.NoClassDefFoundError: ibis/io/Serializable 
... 

예외를 얻을 classpath에 필요한 항아리.

ec/$ CLASSPATH=... java -jar mobat/MOBAT.jar 
ec/$ java -jar -cp ... mobat/MOBAT.jar 

하지만 정확히 동일한 예외가 발생합니다. 어떤 문제가 있습니까?

업데이트 :

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.7.0 
Created-By: Selmar Kagiso Smit 
Main-Class: mobat.Launcher 
Implementation-Version: 1.3.4 
+0

당신의 매니페스트를 게시 할 수 없습니다 MOBAT.jar? lib 폴더의 jar 파일에 대한 종속성을 정의합니까? –

+0

@ 토마스 정 : 완료! – Alexandru

답변

8

클래스 경로는 따라하고 모든 병을 포함한다 : MANIFEST.INF에는 다음이 포함되어 있습니다.

java -classpath b.jar;c.jar -jar a.jar //does not work see below 

";" 유닉스의 경우 윈도우 ":"에 대해 시스템에 따라 다릅니다.

jar 스위치는 메인 클래스가 실행되는 jar 파일 (Manifest 파일의 Main-Class : mobat.Launcher)을 선택하는 데 사용됩니다. 명령 줄 :

java -classpath b.jar;c.jar;a.jar mobat.Launcher 

같은 결과가 나타납니다.

classpath definitions을 Manifest 파일에 추가 할 수 있습니다. 매니페스트 파일에 속성을 포함 할 수 있습니다.

Class-Path: lib/b.jar lib/c.jar 

그런 다음

java -jar a.jar 

가 작동합니다.

편집 :

는 그 -jar 생각 -cp 함께 사용될 수있다. 그러나 java tools documentation는 분명하다 :이 옵션을 사용하면

-jar
는 JAR 파일은 모든 사용자 클래스의 소스이며, 다른 사용자 클래스 경로는 설정은 무시됩니다.

매니페스트와 모든 것 (클래스 경로 및 메인 클래스) 버전 만 작동합니다.

+0

클래스를 실행하거나 항아리 (라이브러리가 아니라 소스)를 수정하여 두 번째 및 세 번째 솔루션이 작동하지 않도록 (실제로 두 번째 시도했지만 다른 오류가 있음). 내가이 질문에서 설명했듯이, 나는 이미 첫 번째 해결책을 시도했다 : classpath에서 jar를 전달했지만 여전히 작동하지 않았다. – Alexandru

+0

jar xft 에 수업이 항아리에 있는지 확인 했습니까? –

+0

"..."이 채워진 전체 명령 줄을 게시하십시오. –

0

당신은

java -cp myjar.jar;lib/*;. mypackage.MyClass

윈도우에서 작동하며

java -cp myjar.jar:lib/*:. mypackage.MyClass

유닉스에서 작동하여야한다 -cp 사용과 함께 -jar 수 없습니다

관련 문제