-
[Tip] - Jar 파일 로드하기Java/Tip, Solution 2017. 8. 18. 14:31
실행이 필요한 Jar 파일을 만들때 주로 사용하는것이 MANIFEST.MF 파일이다.
Main-Class 주체가 되는 Jar 파일을 실행시 다른 Jar 파일을 JVM에 로드하려면 Class-Path에 Jar 파일을 명시하여 다른 Jar 파일들을 JVM에 읽어 들일 수 있다. 하지만 필요한 라이브러리가 추가될 경우 Class-Path에 추가된 Jar파일을 명시해야 하고 다시 실행 주체가 되는 Jar 파일을 다시 만들어야 한다.
다른 Jar 파일 추가가 영구적으로 없을시에는 상관 없으나 추가가 될 수도 있는 상황이라면 MANIFEST.MF 파일 Class-Path 에 로드할 Jar 파일들을 명시하는게 번거로울수 있다 개발 단계에서는 이런 번거로움을 피하기 위해서 Reflection을 활용하면 쉽게 해결할 수 있다.
해당 코드는 Reflection 을 활용하여 같은 경로에 있는 다른 Jar 파일들을 JVM에 로드하는 코드이다.
- runAsFile : 실행하는 파일 이름
- directory : 실행하는 파일이 위치한 디렉토리 경로
static void loadLibrary(final String runAsFile, String directory) { try { final URLClassLoader loader = (URLClassLoader) ClassLoader.getSystemClassLoader(); final Method method = URLClassLoader.class.getDeclaredMethod( "addURL", new Class[] { URL.class }); method.setAccessible(true); new File(directory).listFiles(new FileFilter() { public boolean accept(File file) { if (!file.toString().contains(runAsFile) && file.toString().toLowerCase().contains(".jar")) { try { method.invoke(loader, new Object[] { file.toURI().toURL() }); } catch (Exception e) { } } return false; } }); } catch (Exception e) { JOptionPane.showMessageDialog(null, e.toString()); } }