我真的有一个棘手的问题。我有一个可以使用具有类ComponentContext作为参数的方法运行自定义JAR的容器。加载后,我想通过反射调用此方法,但是有一个问题-我必须使用相同的类加载器(在这种情况下为JCL)创建ComponentContext。看代码:

JclObjectFactory factory = JclObjectFactory.getInstance();
Object context = factory.create(jcl, "org.hive.lib.component.ComponentContextImpl");

Method setConfigDirMethod = context.getClass().getMethod("initialize", File.class, File.class);
setConfigDirMethod.invoke(context, configDir, workspace);

Method method = instance.getClass().getMethod("initialize", context.getClass());
method.invoke(instance, context);


当我试图传递像这样在容器中创建的上下文时

ComponentContextImpl c = new ComponentContext();


由于另一个类加载器,它在java.lang.IllegalArgumentException上失败。

这意味着我的容器依赖于JAR的类,这使我发疯。有没有办法将我自己的ComponentContext(不是从JAR实例化)传递给方法initialize

PS-JAR用assembly:single组装

最佳答案

解决了将共享库标记为provided

08-17 01:38