java - 可从 Eclipse RCP 中的多个模块访问包

标签 java eclipse eclipse-rcp

我将 Eclipse RCP 项目从 Eclipse 2019-12 更新到 2020-03。更新后,我在导出时遇到构建错误,如下所示: “javax.xml.parsers 包可以从多个模块访问:java.xml”。

我在项目中使用 Java 11,没有 module-info.java 文件、Eclipse 3 兼容层和 Eclipse 产品导出向导。

错误消息对我来说基本上是清楚的。它在类路径上检测到某个类两次,这是不允许的。一旦该类由 JDK 模块“java.xml”提供。第二个副本来自 javax.xml osgi 包。 我的问题是这两个包都无法删除。 JDK 模块有很多依赖的 JDK 模块,这些模块在代码中被积极使用,我不认为它们可以通过某些库来补充。许多非常基本的 Eclipse bundle 都使用 OSGI bundle 。所以也无法删除。

所以我有两个问题:

  1. 为什么 Eclipse RCP 的新版本会破坏项目?之前这被认为是一个错误吗? (我没有找到票)
  2. 如何在不进行重大更改的情况下让我的项目再次运行?

编辑1:添加了可重现的示例: https://workupload.com/file/wKUZTXJXsR9

编辑 2:另请参阅 Eclipse Bug Ticket: https://bugs.eclipse.org/bugs/show_bug.cgi?id=562761

我创建了一个最小的示例。通过向导导出产品即可发现问题。我在 Application.java 中使用 javax.xml 中的 DocumentBuilderFactory 来触发问题。 我发现了一些事情:

  • 需要对 org.eclipse.help.ui 的插件依赖才能触发该问题。尽管其他插件也依赖于 javax.xml 插件。
  • 如果我向 javax.xml 插件添加直接依赖项,Eclipse 会在编辑器中告诉您问题。但我们对它只有传递依赖,因此得不到任何提示。

这提出了一些新问题:

  • 似乎 org.eclipse.help.ui 插件导致了这个问题,但我们的应用程序中需要它。这是一个可能的错误吗?还有其他选择吗?
  • 如果我只有 javax.xml 插件的传递依赖,为什么 Eclipse 编辑器不会显示问题?也是一个可能的错误?
  • 最佳答案

    我找到了解决此问题的方法:当使用目标定义(*.target 文件)而不是运行平台(Eclipse IDE 的自动目标定义)时,根本不会发生错误!我不知道这两个目标之间到底有什么区别,因为它们都包含“javax.xml”包。但是,当使用目标文件时,自动添加依赖项时,“javax.xml” bundle 不会添加到产品文件中,并且稍后不会提示需要该 bundle “javax.xml”。不知何故,当使用目标文件时,根本不需要“javax.xml”,因此不会发生错误。

    我认为 Eclipse RCP 中存在一个错误,导致使用运行平台时出现此问题。但我建议无论如何使用目标定义文件,因为这带来了很多其他优点。

    关于java - 可从 Eclipse RCP 中的多个模块访问包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60802975/

    相关文章:

    java - 关于 IntelliJ 到 Eclipse 转换的问题

    多个平台的 Eclipse RCP : build. 属性

    java - spring boot 启动rest服务失败

    eclipse - 如何突出显示 Eclipse 的 Emacs 键绑定(bind)中的选择?

    Eclipse:不要关闭丢失的(因为网络资源不可用)文件

    java - 保存存储在 RCP 应用程序 View 部分中的数据

    java - SWT 4.2 中缺少 Platform.getBundle 方法

    java - 强制对象字段仅具有从父类继承的某些值

    java - Ant 包 org.junit 不存在

    java - 数据库更新时使用 AbstractTableModel 更新 JTable