기존 응용 프로그램에 대한 Java 플러그인을 만들려고합니다. 플러그인은 메인 애플리케이션에서 이미 존재하는 많은 코드베이스 (예 : 로깅, 오류 처리 등)를 다시 사용하고자합니다. Java ClassLoader가 사용 가능한 클래스를 인식하도록하려면 어떻게해야합니까?
는이 같은.jar
파일로 플러그인을로드하려고 :
String localPath = "...";
String pluginName = "...";
File jarFile = new File(localPath);
ClassLoader pluginLoader = URLClassLoader.newInstance(new URL[]{jarFile.toURL()});
pluginLoader.loadClass(pluginName).newInstance();
오전 데 문제는 클래스가 나는 그들이 존재에도 불구하고 찾을 수 없습니다 플러그인 내부 가져올 것입니다
NoClassDefFoundError: com/foo/exception/FooException
at com.foo.plugins.PluginManager.loadPlugin(PluginManager.java:187)
at com.foo.plugins.PluginManager.loadPlugins(PluginManager.java:86)
...
com/foo/exception/FooException
이 코드에서 사방에 사용됩니다,하지만 난 플러그인 jar 파일이 클래스 (및 많은 많은 다른 사람을)를 포함하고 싶지 않았다 : 주요 응용 프로그램은,이 같은 오류를 얻고있다. 대신 나는 ClassLoader
에 어떻게 든 로컬에 존재하는 클래스를 알고 싶습니다. 이것이 가능한가? 그렇다면 어떻게 할 수 있습니까?