Java/Language
실행가능한 JAR여부 판단하기
허니몬
2015. 3. 19. 10:54
실행가능한 JAR(executable jar)을 생성하게 되면 다음과 같이 META-INF 폴더 밑에 MANIFEST.MF 파일이 생성된다.
├── Application.class
└── META-INF
└── MANIFEST.MF
MANIFEST.MF 내용
- Manifest specification
Manifest-Version: 1.0 Class-Path: . Main-Class: Application // 실행가능한jar의 엔트리포인트가 되는 클래스명
예제
- java.util.jar.JarFile API를 이용해서 Jar 파일에 대한 정보를 읽어드릴 수 있다.
- 다음과 같이 JDK6과 JDK7에서 가져올 수 있는 부분이 다른 것으로 보인다.
ㅡ_-);; JDK6, JDK7, JDK8에서 다를 수 있는데 그걸 테스트하기가 좀… 귀찮…
JarFile jarFile = new JarFile(/** 식별하려고 하는 jar 파일*/);
private boolean hasMainClassManifest(JarFile jarFile) throws IOException {
Double javaVersion = Double.parseDouble(System.getProperty("java.specification.version"));
log.debug("Java version: {}", javaVersion);
log.debug("Has Main-Class: {}", jarFile.getManifest().getEntries().containsKey("Main-Class"));
log.debug("Has Main-Class: {}", jarFile.getManifest().getMainAttributes().getValue("Main-Class"));
if(1.7 > javaVersion) {
return jarFile.getManifest().getEntries().containsKey("Main-Class");
} else if(1.7 == javaVersion) {
return null != jarFile.getManifest().getMainAttributes().getValue("Main-Class");
} else {
//TODO JDK 8 에서는 어떻게 될까?
log.debug("Not implements");
return false;
}
}
대략 위의 메서드를 통해서 선택한 jar가 실행가능한 Main-Class를 가지고 있는지 여부를 확인할 수 있다.