【发布时间】:2022-01-17 15:38:31
【问题描述】:
我们正在从 Java 8 迁移到 Java 11。
我们有一个遗留项目 Y,它依赖于另一个遗留项目 X。
项目 X 没有来源,它只是大约 300 个 jar 的集合。
该构建是基于 ant 的,没有 maven。
我现在无法使用 JDK 11 构建项目 Y(既不能在 Eclipse 中,也不能在外部)
因为它说 “包 org.w3c.dom 可以从多个模块访问:, java.xml”
我在 Eclipse 中的 import org.w3c.dom.Document; 行上收到此错误
当我进行外部构建(使用 ant,在 Eclipse 之外)时,我可以成功构建(使用与 JDK 8 下基本相同的 build.xml)?! 为什么只有 Eclipse 会抱怨? !是不是因为我在下面引用的这个 javac 错误。
我在这里阅读(这些与我的问题直接相关):
https://stackoverflow.com/a/53824670/2300597
The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml
http://mail.openjdk.java.net/pipermail/jigsaw-dev/2018-December/014077.html
但我仍然无法解决这些构建问题。
我尝试了 7-8 种不同的方法,但没有任何帮助。
我认为冲突在于这 300 个 jar 中的一些 jar 中的 org.w3c.dom 包和 JDK 模块中的同一包 java.xml 之间。
奇怪的是org.w3c.dom.Document 似乎没有出现在这 300 个 jar 中,只是同一包中的其他类出现在 jar 中。
我陷入僵局,我看不出有什么办法解决这个问题。
我不能轻易更改项目 X,因为它是多个旧项目使用的共享库。
另一方面,我无法从项目 Y 的构建路径中删除 java.xml 模块。
所以我不知道如何解决这个问题。
难道没有办法直接说:好吧,先使用JDK中的类,然后使用JAR中的类(即使它们共享同一个包,它们也不是同一个类)。
修复这些错误的正确方法是什么?
【问题讨论】:
-
@meriton 我说我读过这个,但我仍然看不到解决方案。这就是我问的原因。
-
另外,我们不需要知道您尝试了 多少 项,而是知道您尝试了 哪些 项。我们还能如何检查您是否已经尝试过我们将要描述的解决方案?
-
@meriton 好的,我主要在 Eclipse 中进行了尝试,指定了使项目 Y 依赖于 X 的不同方法(在类路径中,在模块路径中)。然后更改各种编译器选项。将 300 个 jar 直接添加为项目 Y 中的 JAR 依赖项。还尝试将项目 X 转换为模块等。我无法描述我今天 6-7 小时所做的一切。
-
所以我问的是一般情况下,这种结构似乎根本无法工作。正确的?看来我们需要对这一切进行更全面的返工。
-
好吧,听起来你还没有从我链接的答案中尝试过 (3) 解决方案。那么也许可以尝试并报告回来?
标签: java eclipse java-8 java-11