실행가능한 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를 가지고 있는지 여부를 확인할 수 있다.
참고
'Java > Language' 카테고리의 다른 글
백명석님의 클린코더스 강의 (0) | 2015.09.25 |
---|---|
굳이 필요한 게 아니면 enum에 toString() 을 구현하지 않는다. (1) | 2015.04.22 |
파일구분자(File.separator)를 대체하는 Path, Paths 사용하기 (1) | 2014.12.09 |
Effective Java 2nd Edition 을 읽고… (0) | 2014.11.11 |
JDK8 의 특징에 대해서 잘 설명된 포스트 (0) | 2014.05.14 |