Translate

[IntelliJ] 실행 가능한 Jar 파일 생성 시 'xxx.jar에 기본 Manifest 속성이 없습니다.' 오류증상




확인한 IntelliJ ver: 14.1.5, 14.1.6


PS.
IntelliJ 버그(Link)로 보여지며 해결방법 하단의 증상 및 원인을 읽어보길 바란다.



해결방법

자동으로 생성되는 'META-INF/MANIFEST.MF' 파일을
java 디렉토리가 아니라 resources 디렉토리로 설정을 해야 한다.


잘못된 방법






올바른 방법






IntelliJ 에서 Jar 파일을 만들기 위해 'Artifact' 생성 시 default 로 src 하위에 'META-INF/MANIFEST.MF' 를 생성하게 되는데 경로를 'resources' 로 변경을 해준다.









증상

정상적으로 실행 가능한 jar 파일을 만들었다고 생각을 했는데
xxx.jar에 기본 Manifest 속성이 없습니다.
오류가 발생했다.
1004lucifer
해당 jar 파일 압축을 풀어서 MANIFEST.MF 파일을 확인해 보니 다음과 같이 되어있었다.


 Manifest-Version: 1.0
 Build-Jdk: 1.6.0_26
 Built-By: ibrandt
 Created-By: Apache Maven
 Archiver-Version: Plexus Archiver





하지만 프로젝트에 실제 셋팅 되어있는 MANIFEST.MF 파일의 내용은 아래와 같았다.


Manifest-Version: 1.0
Class-Path: junit-4.12.jar logback-core-1.1.3.jar tomcat-embed-core-8.0.28.jar spring-boot-starter-validation-1.3.0.RELEASE.jar json-simple-1.1.1.jarjavapns-jdk16-2.3.jar {...}
Main-Class: org.salim.push.MsPushSchApplication






한참을 구글 검색을 해보니 'META-INF' 디렉토리를 'src' 가 아니라 'resources' 디렉토리 하위에 위치시켜서 해보라는 이야기가 있어서 그대로 했더니 아무일 없단듯이 문제없이 작동이 되었다.



PS.
블로그 작성을 위해 테스트 시 src 디렉토리 하위에 'META-INF/MANIFEST.MF' 파일이 있는 경우에는 빌드 시 해당 파일이 아예 빌드경로에 들어가지도 않고 JAR 파일에 포함이 되지 않았다.
위의 경우는 IntelliJ 가 Maven Template Project 에 있는 'META-INF' 디렉토리를 그대로 복사한 버그로 의심이 된다.


참조: http://stackoverflow.com/questions/20952713/wrong-manifest-mf-in-intellij-idea-created-jar


댓글