可从Eclipse RCP中的多个模块访问软件包

问题描述 投票:0回答:1

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

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

错误消息对我来说基本上是清楚的。它在类路径上两次检测到某个类,这是不允许的。一旦由JDK模块“ java.xml”提供了该类。第二个副本来自javax.xml osgi捆绑包。我的问题是两个软件包都无法删除。 JDK模块具有许多依赖的JDK模块,这些模块在代码中得到了积极使用,我认为某些库不能对它们进行补充。 OSGI包被许多非常基本的日食包使用。因此它也无法删除。

所以我有两个问题:

  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插件。
  • Eclipse会告诉您编辑器中的问题,如果您将直接依赖项添加到javax.xml插件中。但是我们对此只有传递依赖,因此没有任何提示。

这提出了一些新问题:

  1. 似乎org.eclipse.help.ui插件会导致此问题,但是我们在应用程序中需要它。这可能是错误吗?有其他选择吗?
  2. 如果我只对javax.xml插件有传递依赖,为什么eclipse编辑器不显示问题?还有可能的错误吗?
java eclipse eclipse-rcp
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.