【问题标题】:Passing object to the JCL-loaded class将对象传递给 JCL 加载的类
【发布时间】:2013-10-22 10:03:55
【问题描述】:

我有一个非常棘手的问题。我有一个容器,它可以运行自定义 JAR,方法是使用类 ComponentContext 作为参数。加载后我想用反射调用这个方法,但是有一个问题——我必须使用相同的类加载器(在本例中为 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 组装的

【问题讨论】:

    标签: java jar classloader dynamic-class-loaders


    【解决方案1】:

    解决了将共享库标记为provided

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多