将对象传递给加载JCL的类

时间:2013-10-14 18:45:09

标签: java jar classloader dynamic-class-loaders

我有一个非常棘手的问题。我有一个容器,它可以使用类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

组合在一起

1 个答案:

答案 0 :(得分:0)

解决为将共享库标记为provided