我正在开发一个基于 Eclipse 的项目,该项目最近从 Java 1.8 切换到 Java 11。因此,我们现在在 JRE 中的类与从 Eclipse 插件依赖项中引入的类之间存在冲突。
The package javax.xml.parsers is accessible from more than one module: <unnamed>, java.xml
所以 java.xml.* 类现在出现了两次。一次来自模块 java.xml,一次是由于我们的插件对 org.eclipse.wst.xml.core 的依赖
org.eclipse.wst.xml.core -> org.apache.xerces -> javax.xml
我想做的是将模块 java.xml 或包 javax.xml 排除在构建之外。我找到了 this post关于如何排除模块的解释,但由于多种原因我不能这样做:
- 许多其他模块依赖于 java.xml。删除它会产生更多问题
- mavan tycho build 并不关心我对 eclipse 项目模块设置的处理。
在这一点上,我认为最好的解决方案是将 javax.xml 排除在构建之外,但我无法找到如何在 eclipse 和 tycho 构建中执行此操作的方法。
有谁知道如何从 Eclipse 构建/Tycho 构建中排除对插件的依赖?还是有另一种方法来解决像这样的模块/osgi 冲突?
最佳答案
看起来根本原因是 org.eclipse.wst.xml.core
在尚未准备好用于 Java 9 的版本中使用 Xerces或更高并且它reexports this dependency .
根据release notes of Xerces Java 9 或更高版本至少需要 2.12.1 版本(目前是最新版本):
Xerces-J was previously not building from sources when Java 9+ was used. This release fixes this.
在Eclipse Orbit (您可以获得经批准也可用于商业产品的第三方插件)是 Xerces 2.9.0 的最新版本。因此,您必须自己创建一个 Xerces 2.12.1 插件。如果您能将这项工作贡献给 Eclipse(为此,report it to Eclipse WTP Source Editing),那就太好了。
关于java - 如何解决 JPMS 和 OSGi Bundle for Eclipse plugin project an Tycho 之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63128271/