IntelliJ IDEA의 jar 아티팩트를 통해 OptaPlanner 6.0.1 라이브러리를 사용하는 프로젝트를 .jar로 패키징하려고하지만 표준이 포함 된 manifest.mf 대신
Manifest-Version: 1.0
Main-Class: a.b.c.app
jar는 OptaPlanner의 지원 라이브러리 중 하나 인 ecj-3.7.2.jar에 제공된 것을 사용합니다.
Manifest-Version: 1.0
Build-Jdk: 1.6.0_26
Built-By: ibrandt
Created-By: Apache Maven
Archiver-Version: Plexus Archiver
이 때문에 "no main manifest attribute, in appname.jar"
앱을 실행하려고 할 때 오류가 발생합니다. .jar 파일의 매니페스트를 수동으로 교체하면 모든 것이 올바르게 작동합니다. 이 문제를 해결하기 위해 할 수있는 일이 있습니까?
라이브러리를 별도의 / lib 디렉토리에 보관하고 추출 된 디렉토리로 jar 아티팩트의 루트에 추가되었습니다. IntelliJ IDEA는 v13.0.1입니다.
답변
나는 같은 문제가 있었다.
MANIFEST.MF가 다음 위치에 있는지 확인하십시오.
src/main/resources/META_INF/
아니
src/main/java/META_INF/
답변
고치다:
- 파일> 프로젝트 구조
- 아래 프로젝트 설정 왼쪽에있는 “이슈”를 선택
- 중간 창에서 JAR 정의를 찾아 선택합니다.
- “출력 레이아웃”탭의 왼쪽 창에서 목록에서 jar 파일을 찾아 선택합니다.
- 하단에서 “기존 매니페스트 사용”버튼을 클릭하고 프로젝트 소스에있는 매니페스트 파일을 선택합니다.
- 확인을 클릭하고 빌드를 실행하십시오.
답변
다른 답변 중 하나에서 @grudolf의 의견에서 언급했듯이이를 수행하는 한 가지 방법 (그리고 가져온 Gradle 프로젝트에서 나를 위해 일한 유일한 방법)은 다음과 같이 빈 항아리를 만드는 것입니다.
- 프로젝트 구조-> 아티팩트-> + Jar-> 비어 있음
- 이제 가운데 창에 매니페스트 만들기 및 기존 매니페스트 사용 버튼이 있습니다. 이 중 하나를 사용하십시오.
- 자체 매니페스트가있는 종속 라이브러리를 출력 루트에 추출하면 어려움이 있었는데, 수동으로 새로 만든 매니페스트를 간헐적으로 덮어 쓰는 것처럼 보였습니다. 작업 순서를 엉망으로 만드는 것이 제대로 작동하는 것처럼 보였습니다.
최신 정보:
이것은 확실히 Idea의 버그입니다. 이 연결된 답변 은 추출 된 디렉토리가있을 때 안정적으로 작동합니다. 본질적으로 .idea / JARNAME.xml을 찾고 항아리 의 요소 맨 위에 다음 요소를 추가하십시오 <root>
. 매니페스트를 포함하는 새 파일 사본 위에 추출 된 요소는 새 매니페스트를 방해합니다.
<element id="directory" name="/META-INF">
<element id="file-copy" path="$PROJECT_DIR$/modulename/src/META-INF/MANIFEST.MF" />
</element>
답변
Main Class를 지정하려면이 플러그인을 pom.xml에 추가해야합니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<mainClass>Form</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
답변
비슷한 문제가있었습니다.
문제는 pom.xml 파일에있었습니다.
<archive>
<manifestEntries>
<Dependencies>one.jar,
two.rar,
other.jar
</Dependencies>
</manifestEntries>
</archive>
이 코드가 이클립스에서 작동하는 이유를 모르지만 IntelliJ에서는 작동하지 않습니다.
이것은 맞습니다.
<archive>
<manifestEntries>
<Dependencies>one.jar, two.rar, other.jar</Dependencies>
</manifestEntries>
</archive>
Manifest.mf가 작동했습니다!
이게 도움이 되길 바란다.
답변
실행 가능한 jar를 생성하는 방법에는 여러 가지가 있습니다. IntelliJ의 GUI 기능을 사용하는 것이 좋은 방법 중 하나입니다. 또 다른 방법은 빌드 서버 친화적 인 Maven (또는 gradle, buildr 등에서 유사하게)을 사용하는 것입니다.
optaplanner 예제 maven 빌드에서 다소 복사 붙여 넣기 가능합니다.
- 최종 사용자 jar (optaplanner-examples-*. jar)는 매니페스트에 종속성의 클래스 경로를 포함 해야합니다 .
- sh 및 bat 스크립트 는 그에 따라 해당 jar를 실행해야합니다.
답변
Manifest와 같은 문제를 일으키지 않으려면 “src”디렉토리에 “META-INF”라는 이름의 디렉토리가 있어야합니다. 그래서, 그것을 생성하고 다음과 같은 내용으로 “MANIFEST.MF”라는 파일을 그 안에 넣으십시오.
Manifest-Version: 1.0
Main-Class: <packageName>.Main
위의 Main 클래스를 포함하는 패키지 이름을 바꾸는 것을 잊지 마십시오!