【问题标题】:Can I dynamically load a different version of the same Java library in an RCP e4 app?我可以在 RCP e4 应用程序中动态加载同一 Java 库的不同版本吗?
【发布时间】:2016-06-08 21:11:38
【问题描述】:

如果有更多的空间,也许更好......

纯 RCP e4 应用程序是否可以包含同一个 java 库的多个版本,以便动态加载并根据模型对象的一个​​属性与模型对象相关联?

示例:e4 应用程序将使用 Axis 与众多端点进行通信。这些端点中的每一个都可以/将具有不同版本的 Axis。因此,应用程序需要有一个配置页面,用户可以在其中动态选择所需的 Axis 版本。然后基于该配置,将动态加载所需的插件以供使用。

非常感谢您提前提出的想法和意见。

【问题讨论】:

  • e4 没有为此提供任何特殊功能,并且由于复杂的 OSGi 插件类加载器系统,它可能会很棘手。对此here 的一些讨论
  • 我是一名初学者 RCP 开发人员,在我浏览“棘手的路径”时,我会感谢您的帮助。您是否可以在此论坛之外协助我获得赔偿?

标签: java rcp e4


【解决方案1】:

可以使用多个类加载器将同一库的多个版本加载到 Java 应用程序中。看看URLClassLoader。每个版本的库都可以像这样加载:

URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] {new URL(JAR_PATH_VERSION_N)});
Class someClass = classLoader.loadClass(CLASS_QNAME);

【讨论】:

    【解决方案2】:

    您可以在不同的插件中实现不同的端点通信。由于每个插件都有自己的类加载器,因此每个插件都可以使用自己的 AXIS 实现。您可以使用 plugin.xml 的依赖项中的版本边界来指定使用的确切版本。只要您不在同一个插件中使用两个不同的版本,它应该可以工作。我们曾经使用 Apache Commons Lang 库成功地做到了这一点。

    [edit] 这将是静态的,而不是动态的 [/edit]

    【讨论】:

      猜你喜欢
      • 2011-05-22
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 2023-03-30
      相关资源
      最近更新 更多