我目前正在编写一个Eclipse Plug-In
依赖于外部第三方JAR。当我在插件的Runtime
选项卡中配置所有依赖项时,一切正常。
但是,我使用的库可能因安装而异(并且本身没有插件),因此我需要一种方法来在运行时(或Eclipse启动)中配置插件的类路径。
我尝试使用URLClassLoader
加载我需要的类,但效果很好。但是,第三方库本身也具有依赖性,并且不使用我的URLClassLoader
,而是使用默认的类加载器(在Eclipse中,它是org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader
)。设置Thread.currentThread().setContextClassLoader()
没有帮助。
我的最后和绝望的尝试是通过反思改为SystemClassLoader
(根据this StackOverflow question,但这似乎对Eclipse Plug-In
没有任何影响。
URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class clazz= URLClassLoader.class;
// Use reflection
Method method= clazz.getDeclaredMethod("addURL", new Class[] { URL.class });
method.setAccessible(true);
method.invoke(classLoader, new Object[] { url });
有没有人知道如何在插件执行期间将JAR添加到类路径中,或者可能定义一个文件夹,所有包含JAR的内容都会自动添加到类路径中?谢谢你的帮助!