2011-12-06 5 views
6

매니페스트의 기본 클래스를 언급하는 jar 파일이 있습니다. 나는 다음과 같은 명령 코드 실행 및 작동java -jar 옵션이 클래스 경로 옵션을 변경합니까

java -cp .;./* com.foo.MainClass 

를 사용하여 항아리를 실행하려고합니다.

나는 다음과 같은 명령을 사용하여 항아리를 실행하려고하면

java -cp .;./* -jar myjar.jar 

내가 수업을하지 myjar.jar과 같은 폴더에 일부 단지에 대한 발견 execptions. 나는 -cp 옵션이 클래스 경로에있는 jar를 포함하기를 희망한다. java.class.path 속성을 출력하도록 코드를 수정했습니다. 첫 번째 경우에는 현재 디렉토리의 모든 jar 파일을 나열하고 두 번째 경우에는 myjar.jar 파일을 나열했습니다.

또한 모든 JAR 파일에 클래스 경로 요소를 추가하도록 매니페스트를 수정했습니다. 그런 다음 두 번째 명령이 작동합니다. 하지만 내 코드에서 명령 프롬프트에서 제공되는 이름을 가진 임의의 클래스를로드하려고하므로 클래스 경로에 폴더의 모든 병을 포함하고 싶습니다. 이 시나리오에서 두 번째 명령을 작동하게하려면 어떻게해야합니까? this에서

+0

[OneJar] (http://one-jar.sourceforge.net/)에서 살펴보십시오. 그것은 CP 문제를 해결해야합니다. – flash

+0

@flash : 아마도 그렇지 않습니다. 그는 컴파일 타임에 추가 클래스 경로를 알지 못한다고 말합니다 (그렇지 않으면 그는 단지 그것을 매니 페스트에 추가 할 수 있습니다). – Thilo

+1

자신의 클래스 로더 (환경에 따라 다시 추가하는)를 사용해야하는 것 같습니다. – Thilo

답변

6

,

실행 가능한 JAR는 매니페스트 파일의 클래스 경로 헤더를 통해 필요한 모든 다른 종속 JAR 파일을 참조해야합니다. 환경 변수 CLASSPATH와 명령 줄에 지정된 클래스 경로는 -jar 옵션을 사용하면 JVM에서 무시됩니다.

+0

감사! jar 파일이 내 jar 파일과 동일한 위치에 있고 (내 매니페스트에 언급되지 않은) 임의의 클래스를로드하려는 경우 URLClassLoader를 사용하여 해당 jar를 명시 적으로로드해야합니다. – mihirg

+0

음, 매니페스트 클래스 패스에'plugins/*'와 같은 것을 추가 할 수 있습니다. jar 파일의 폴더는 고정되지만 거기에있는 모든 jar 파일은 선택해야합니다. – Thilo

+0

또는 그렇지 않을 수도 있습니다. "그러나 클래스 경로 와일드 카드는 Class-Path jar-manifest 헤더에서 사용되지 않습니다." :-( – Thilo

0

이 문제를 해결하려면 고유 한 클래스 로더가 필요합니다. -jar은 매니페스트의 정보 만 존중하며 와일드 카드는 허용되지 않습니다.

당신은 유용한 재충전 클래스의 예를 찾을 수 있습니다 : http://www.exampledepot.com/egs/java.lang/ReloadClass.html

0

Here은이 문제에 대한 좋은 토론입니다.

관련 문제