JAR 파일에서 메인 클래스 매니페스트 속성을로드하지 못한 이유는 무엇입니까?


85

이런 식으로 JAR 파일을 만들었습니다 jar cf jar-file input-files. 이제 실행하려고합니다. 실행되지 않음 (jre 명령을 찾을 수 없음) :

jre -cp app.jar MainClass

이것은 작동하지 않습니다.

java -jar main.jar

(main.jar에서 Main-Class 매니페스트 속성을로드하지 못했습니다.)

나는 또한 발견했다

JAR 파일로 패키지 된 애플리케이션을 실행하려면 (버전 1.2-Main-Class 매니페스트 헤더 필요)

"Main-Class 매니페스트 헤더"는 무엇입니까? 어떻게 만들고 어디에 두나요?

답변:


62

나는 당신의 증상을 믿을 수 없습니다.

  • jre명령을 찾을 수없는 경우 실행 jre -cp app.jar하면 동일한 오류가 발생합니다.
  • 클래스 경로에 JAR 파일을 추가하는 것만으로도 오류가 발생하지 않습니다.

다음을 실행하면이 오류가 표시 될 것으로 예상합니다.

java -jar app.jar

Main-Class 헤더는 JAR 파일의 매니페스트에 있어야합니다. 이것은 다른 필수 라이브러리와 같은 것에 대한 메타 데이터입니다. 적절한 매니페스트를 만드는 방법 은 Sun 설명서 를 참조하십시오 . 기본적으로 다음과 같은 줄을 포함하는 텍스트 파일을 만들어야합니다.

Main-Class: MainClass

그런 다음 실행

jar cfm app.jar manifest.txt *.class

감사합니다. 효과가있다. 를 사용하여 매니페스트 파일 Main-Class: MainClass을 만든 다음 지정한 명령으로 .jar 파일을 만들었습니다. 그 후를 통해 프로그램을 실행할 수있었습니다 java -jar main.jar.
Roman

1
또 다른 옵션은 별도의 파일없이 -e 옵션을 사용하는 것입니다. jar cfe app.jar MainClass *.class참고 : -e는 JDK 6에 추가되었습니다.
2013

35
  1. 클래스 경로를 설정하고 컴파일

    javac -classpath "C : \ Program Files \ Java \ jdk1.6.0_ updateVersion \ tools.jar"yourApp.java

  2. manifest.txt 생성

    메인 클래스 : yourApp 개행

  3. yourApp.jar 생성

    jar cvf0m yourApp.jar manifest.txt yourApp.class

  4. yourApp.jar 실행

    java -jar yourApp.jar


9

다음으로 실행할 수 있습니다.

java -cp .;app.jar package.MainClass

JAR 파일에 매니페스트가 없으면 나를 위해 작동합니다.


나는 : 인식 할 수없는 옵션 : -cp. 답변을 검토해 주시겠습니까? 이 명령이하려는 일이 아니기 때문입니다. (java -cp.; app.jar package.MainClass). 이것은 하나의 명령입니까, 아니면 두 가지입니까?
kenorb

1
docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/… "-cp.; app.jar"는 MainClass.main () 메서드를 실행할 수있는 것보다 클래스 경로에 app.jar 파일을 추가해야합니다 ( MainClass는 "패키지"패키지에 있습니다).
Dainius

1
따라서 Linux에서는이 옵션 (-cp)이 존재하지 않을 것입니다 (내는 java v1.6.0_24, OpenJDK Runtime Environment (IcedTea6 1.11.3) (6b24-1.11.3-1ubuntu0.12.04.1)).
kenorb

java -version => Java HotSpot (TM) 64 비트 서버 VM (빌드 20.1-b02, 혼합 모드) "java -cp. test1.Main"작동
Dainius

/ usr / lib / jvm / java-6-openjdk-amd64 / bin / java -version => OpenJDK 64 비트 서버 VM (빌드 20.0-b12, 혼합 모드) "/ usr / lib / jvm / java-6-openjdk -amd64 / bin / java -cp. test1.Main "작동
Dainius

6

이 오류가 발생했는데 인수 순서가 잘못 되었기 때문입니다.

옳은

java maui.main.Examples tagging -jar maui-1.0.jar 

잘못된

java -jar maui-1.0.jar maui.main.Examples tagging 

1
이것은 bsd 문제 일 수 있으며 최근에 다른 방식으로 수행했다고 확신합니다.
Sridhar Sarnobat

1

적절한 매니페스트 파일과 함께 실행 가능한 JAR 파일을 올바르게 생성했는지 확인하는 가장 쉬운 방법은 Eclipse 를 사용 하여 빌드하는 것입니다. Eclipse 프로젝트에서 기본적으로 메뉴에서 파일 / 내보내기를 선택하고 프롬프트를 따릅니다.

이렇게하면 JAR 파일이 올바른지 확인할 수 있으며 여전히 문제가있는 경우 다른 곳을 살펴볼 수 있습니다. 이 프로세스는 FAQ에 자세히 설명되어 있습니다. 독립 실행 형 SWT 프로그램을위한 실행 가능한 JAR 파일을 어떻게 생성합니까? .


ExportEclipse IDE에서 감사합니다 .
Ninh Pham

1

시험

java -cp .:mail-1.4.1.jar JavaxMailHTML 

manifest파일이 필요하지 않습니다 .


0

나는 또한 NetBeans 에서이 오류가 있음을 발견했습니다. 다음이 도움이 되었기를 바랍니다.

  1. 프로젝트 구성으로 이동할 때 실행할 기본 클래스를 설정했는지 확인하십시오.
  2. 빌드 또는 클린 빌드 수행
  3. 원하는 위치에 jar 파일을 배치하고 명령 줄에서 java -jar "YourProject.jar"을 다시 시도합니다.

이것은 내가 NetBeans에서 사용하고있는 다른 "테스트"프로그램을 가지고 있었고 프로젝트 구성의 Run 부분 아래에있는 Main Class가 올바르게 설정되었는지 확인해야했기 때문에 발생한 문제였습니다.

많은 축복, John P


0

내가 실행할 때 같은 오류가 발생했습니다.
jar cvfm test.jar Test.class Manifest.txt

해결 방법 :
jar cvfm test.jar Manifest.txt Test.class

내 매니페스트에는 오라클 문서에 지정된 진입 점이 있습니다 (파일 끝에 줄 바꿈 문자가 있는지 확인하십시오).
Main-Class : Test


0

나는 같은 문제에 직면했다. 이 unix 명령은 기본 클래스를 찾을 수 없습니다. 이는 런타임 및 컴파일 시간 JDK 버전이 다르기 때문입니다. 자바 컴파일러 버전을 변경 한 후 이클립스를 통해 항아리를 만드십시오. 다음 링크가 도움이되었습니다.

http://crunchify.com/exception-in-thread-main-java-lang-unsupportedclassversionerror-comcrunchifymain-unsupported-major-minor-version-51-0/

이 단계 후에 만든 jar를 실행 한 다음 실행하십시오.


0

클래스 경로가 매니페스트에 완전히 지정되어 있으면 Java 런타임 환경 의 마지막 버전 이 필요할 수 있습니다. jre 8을 다시 설치할 때 문제가 해결되었습니다.


0

eclipse를 사용하는 경우 아래를 시도하십시오. 1. 프로젝트를 마우스 오른쪽 버튼으로 클릭-> 내보내기를 선택합니다. 2. 내보내기 대상 선택에서 Runnable Jar 파일을 선택합니다. 3. jar의 이름을 입력하고 "Package required ..."를 선택합니다 (두 번째 라디오 버튼). -> 마침

도움이 되었기를 바랍니다...!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.