我们正在从Java 8迁移到Java 11。
我们有一个遗留项目Y,它依赖于另一个遗留项目X。
项目X没有来源,它只是一个大约300个罐子的集合。
构建是基于蚂蚁的,没有maven。
我现在不能用JDK 11 (既不在Eclipse中,也不在外部)构建项目Y。
因为它说“包org.w3c.dom可以从多个模块访问:,java.xml"
在做import org.w3c.dom.Document;的行中,我在Eclipse中得到了这个错误
--当我做外部构建时(使用ant,在Eclipse之外)--我可以成功地构建(与JDK 8下的build.xml基本相同)?!为什么只有Eclipse才会抱怨呢?!是因为我在下面引用的javac bug。
我在这里读到(这些与我的问题直接相关):
https://stackoverflow.com/a/53824670/2300597
The package org.w3c.dom is accessible from more than one module: , java.xml
http://mail.openjdk.java.net/pipermail/jigsaw-dev/2018-December/014077.html
但我仍然无法解决这些构建问题。
我尝试了7-8种不同的东西,但没有任何帮助。
我认为冲突是来自这300个jars的org.w3c.dom包和JDK模块java.xml中相同的包之间的冲突。
奇怪的是,org.w3c.dom.Document似乎没有出现在这300个罐子中,只是同一个包中的其他类都出现在jars中。
我陷入僵局,我看不出有什么办法解决这个问题。
我不能轻易地更改项目X,因为它是多个遗留项目使用的共享库。
另一方面,我不能从项目Y的构建路径中删除java.xml模块。
所以我不知道该怎么处理。
难道没有什么方法可以这么说吗:好的,先使用JDK中的类,然后再使用JAR中的类(尽管它们共享相同的包,但它们不是同一个类)。
修正这些错误的正确方法是什么?
发布于 2022-01-17 15:59:12
从版本9开始,Java支持JPMS (Java平台模块系统)。
在Java平台模块系统中,不允许在多个模块中使用相同的包。因此,解决方案是找到导出这个包org.w3c.dom的模块(jars),并删除其中的一个模块或包。
https://stackoverflow.com/questions/70743912
复制相似问题