Java 构建问题 - Java 8 到 Java 11 迁移

Java build issues - Java 8 to Java 11 migration

我们正在从 Java 8 迁移到 Java 11。
我们有一个遗留项目 Y,它依赖于另一个遗留项目 X。
项目 X 没有源,它只是一个大约 300 个 jar 的集合。
该构建是基于 ant 的,没有 maven。

我现在无法使用 JDK 11 构建项目 Y(无论是在 Eclipse 中还是在外部)
因为它说 "The package org.w3c.dom is accessible from more than one module:, java.xml"

我在 Eclipse 中的一行 import org.w3c.dom.Document;

中收到此错误

当我进行外部构建时(使用 ant,在 Eclipse 之外)我可以成功构建(build.xml 与 JDK 8 下基本相同)?! 为什么只有 Eclipse 在抱怨?!是因为我在下面提到的这个 javac 错误吗?

我正在阅读这里(这些与我的问题直接相关):


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 中的一些 org.w3c.dom 包与 JDK 模块 java.xml 中的相同包之间。

奇怪的是 org.w3c.dom.Document 似乎不存在于这 300 个罐子中的任何一个中,只是同一包中的其他 class 存在于罐子中。

我陷入了僵局,我看不出有什么办法可以解决这个问题。
我不能轻易更改项目 X,因为它是多个遗留项目使用的共享库。
另一方面,我无法从项目 Y.
的构建路径中删除 java.xml 模块 所以我不知道如何处理这个问题。

有没有办法直接说:好的,首先使用 JDK 中的 classes,然后使用 JAR 中的那些(即使它们共享相同的包,它们不一样 class).

修复这些错误的正确方法是什么?

从版本 9 开始 Java 支持 JPMS(Java 平台模块系统)。

在Java 平台模块系统中,不允许在多个模块中使用相同的包。因此,解决方案是找到导出此包的模块(jars)org.w3c.dom 并删除其中的一个模块或包。