【发布时间】:2021-02-28 08:51:25
【问题描述】:
我正在将我的公司项目从 Java 1.8 迁移到 OpenJDK 14。像其他多个人一样(在 this、this 或 this 线程中)我遇到了一些麻烦Java 9 模块化,特别是包org.w3c.dom。
我已经生成了module-info.java,目前 JRE 系统库 (OpenJDK 14) 和所有外部 JAR 都位于 Java 构建路径中的模块路径上。所以我不再有错误module: <unnamed>。
我现在得到的实际编译错误是:
The package org.w3c.dom is accessible from more than one module: batik.all, java.xml, xml.apis.ext
顺便说一句,我不能简单地删除 JAR batik.all 和 xml.apis.ext,因为项目中使用了这些 JAR 中的其他包,它们不在 JavaSE 中。
我的主管还告诉我不要将任何非 maven 项目转换为 maven 项目,我提到这一点是因为我发现的所有其他关于这个问题的参考资料似乎都在讨论利用 Maven 依赖项和排除项的解决方案。
现在经过一些分析,我得出的结论是,我摆脱这些错误的最有效方法是解压缩两个 JAR 文件,反编译包,从那些外部 JAR 中删除重复的 org.w3c.dom最后重新编译整个东西并将自定义 JAR 传递给构建路径。
- 这个想法有意义吗?如果不能使用 Maven 依赖,你会这样做吗?
- 自从我们从 1.8 迁移以来,我从未真正使用过
module-info.java,所以也许有一种更简单的方法可以在该文件中排除这些包?我愿意接受替代解决方案! - 最后但同样重要的是,如果我描述的解决方案是可行的方法,那么解压和重新打包这些 JAR 文件的最佳方法是什么?
【问题讨论】:
标签: java xml jar migration modularity