짧은 형식 : 메인이 항아리 안에 있다면, 아마도 'YourJarsName.jar'가 클래스 경로에 있더라도 작동하도록하려면 추가 '-jar pathTo / yourJar / YourJarsName.jar'이 명시 적으로 선언되어 있어야합니다. , 5 년 전에 묻는 원래 질문에 대답하기 위해 표현되었습니다. 각 항아리를 명시 적으로 다시 선언 할 필요는 없지만 java6에서도 자신의 항아리를 다시 선언해야합니다 ...)
긴 형식 : (이것은 자바에 인터 로퍼조차도 이것을 사용할 수 있기를 바랍니다.)
여기에서 많은 사람들처럼 Eclipse를 사용하여 항아리를 내보내고 있습니다 (File-> Export-> 'Runnable JAR File'). '라이브러리 처리'이클립스 (Juno) 오퍼에는 세 가지 옵션이 있습니다.
opt1: "Extract required libraries into generated JAR"
opt2: "Package required libraries into generated JAR"
opt3: "Copy required libraries into a sub-folder next to the generated JAR"
일반적으로 opt2를 사용하고 (opt1은 확실히 깨짐) 사용하고있는 항아리 중 하나의 기본 코드는 옵션을 선택할 때 일식이 활용하는 편리한 "jarinjar"트릭으로 나누기를 발견했습니다. opt3이 필요하다는 것을 깨닫고이 StackOverflow 항목을 찾은 후에도 일식 밖에서 메인을 시작하는 방법을 알아내는 데 여전히 시간이 걸렸으므로 다른 사람들에게 유용하기 때문에 여기에 도움이 된 것이 있습니다 ...
jar의 이름을 "fooBarTheJarFile.jar"로 지정하고 모두 "/ theFully / qualifiedPath / toYourChosenDir"디렉토리로 내보내도록 설정되어 있습니다.
( '내보내기 대상'필드는 '/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar'이라는 의미)
완료 후, eclipse를 찾은 다음 모든 라이브러리를 해당 내보내기 디렉토리 내의 'fooBarTheJarFile_lib'라는 폴더에 넣고 다음과 같은 것을 제공합니다.
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar01.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar02.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar03.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar04.jar
그런 다음 다음을 사용하여 시스템의 어느 곳에서나 시작할 수 있습니다.
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" -jar /theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(Java 초보자의 경우 : 'package.path_to.the_class_with.your_main'은 'main (String [] args)가 포함 된'TheClassWithYourMain.java '파일의 맨 위에있는 선언 된 패키지 경로입니다. {.. .} '는 자바 외부에서 실행하고 싶습니다.)
주의해야 할 함정은 선언 된 클래스 경로의 jar 목록에 'fooBarTheJarFile.jar'이 충분하지 않다는 것입니다. '-jar'을 명시 적으로 선언하고 해당 jar의 위치를 다시 선언해야합니다.
예를 들면 다음과 같습니다.
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar;/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" somepackages.inside.yourJar.leadingToTheMain.TheClassWithYourMain
상대 경로로 복원 :
cd /theFully/qualifiedPath/toYourChosenDir/;
BREAKS: java -cp "fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" -jar package.path_to.the_class_with.your_main.TheClassWithYourMain
WORKS: java -cp ".;fooBarTheJarFile_lib/*" -jar fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(자바 버전 12.04의 OpenJDK 64 비트 서버 VM을 통해 Java 버전 "1.6.0_27"사용)