【问题标题】:Conflict with wildfly 25 runtime library and openjdk 17 library与wildfly 25运行时库和openjdk 17库冲突
【发布时间】:2021-12-28 16:11:41
【问题描述】:

我有一个 Eclipse(版本:2021-09 (4.21.0))项目,我得到“包 org.w3c.dom 可以从多个模块访问:未命名>,java.xml”。

org.w3c.dom 位于构建路径上的 jre 系统库 (openjdk-17) 中的 java.xml 中。 org.w3c.dom 也在模块 xercesImpl-2.12.0.SP03.jar 中,该模块包含在添加到我的构建路径的 wildfly 25 运行时库中。

我的项目需要 jar 中的 xerces 类,但新的 jdk 强制执行规则,即不能在 2 个 jar 中使用相同的 pacakage 名称。

我该如何解决这个问题?请注意,我不使用 maven,因此我需要一种方法从 jar 或 jdk17 中排除“org.w3c.dom”类。

提前致谢。

【问题讨论】:

  • 用解压打开jar并删除文件/包,然后压缩剩下的文件并重命名为*.jar
  • @Riadh - 这就是我所做的(实际上你可以直接使用 zip 从 jar 中删除)。它消除了冲突,但它似乎是一种处理问题的激烈方式,我更喜欢一种更好的方式来处理它。

标签: java wildfly


【解决方案1】:

我遇到了完全相同的问题,只是使用了不同的罐子。最好的解决方案是你不使用模块化项目,所以你没有module-info文件,你可以把你的xercesImpl-2.12.0.SP03.jar放在classpath下。

如果您必须使用模块化项目,请尝试在 module-info 文件中添加以下内容: requires xercesImpl-2.12.0.SP03; 这样它就不应该再出现在未命名的模块中了。 如果还是不行,试试右键项目->构建路径->配置构建路径->排序和导出选项卡,把jdk系统库移到顶部。

This 线程很有用。

【讨论】:

  • Aleksandar Cvisic - 不幸的是,这并没有解决我的问题。我的项目中没有模块信息文件,并且我的构建路径中的库排序没有帮助。我还检查了您引用的线程,但没有高兴。
  • @dkuehner 当您打开项目的“配置构建路径”时,xercesImpl-2.12.0.SP03 是在模块路径上还是在类路径上?
  • @dkuehner 如果它在模块路径上,那么你的项目是模块化的,你应该有模块信息文件。我认为您可以创建它,只需在项目的 src 文件夹中创建新文件,将其命名为 module-info.java 并添加: module [your project name] { requires xercesImpl-2.12.0.SP03; }。或者您可以从模块路​​径中删除 jar 并将其添加到类路径中。
  • xerces jar 在类路径上,而不是在模块路径上。它包含在 Wildfly 服务器运行时库中。我为解决问题所做的(以我不喜欢的方式)是编辑 jar 并从内部删除 org.w3c.dom 对象。这消除了冲突,但它似乎是处理问题的一种激烈方式。
猜你喜欢
  • 2012-10-17
  • 2012-01-04
  • 2017-05-02
  • 1970-01-01
  • 2014-08-10
  • 2018-12-24
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
相关资源
最近更新 更多