【发布时间】:2020-04-13 05:21:01
【问题描述】:
我正在尝试将使用 Maven 和 Eclipse 的现有 Java 项目转换为 Java 9+ 模块。项目有单元测试,单元测试有测试依赖。我需要在测试代码中提供测试依赖项,但我不希望它们在已发布的模块中暴露给世界其他地方。
我认为Testing in the Modular World 很好地描述了 Maven 解决方案。总之,一种解决方案是在主源文件夹中创建一个module-info.java,在测试文件夹中创建另一个。主文件夹中的文件具有真正的依赖关系。 test 文件夹中的文件添加了测试依赖项。
该解决方案在 Maven 中运行良好,我可以从命令行构建和运行测试。但是,当我将项目作为 Maven 项目导入 Eclipse 时,它会犹豫。 Eclipse 抱怨“构建路径包含重复的条目模块信息”并拒绝构建项目。
在文章中使用包含--add-reads 的module-info.test 的其他建议解决方案无效,并且在Maven 和Eclipse 中构建都失败,因为测试找不到它们的依赖项。
为了使事情更复杂,我需要从 Maven 导入测试依赖项,但我还需要导入主代码不使用的标准 Java 模块。例如,一个单元测试依赖于java.httpserver 提供的内置 Web 服务器,由于它是 JDK 的一部分,所以对测试依赖项所做的任何魔术都会错过它。
是否有适用于 Maven 和 Eclipse(最新版本)的解决方案?这听起来像是一个很常见的问题,并且模块系统现在已经存在了一段时间。
请注意,我真的不想更改 Eclipse 中的项目设置。我可以摆弄 pom 文件中的插件,但添加一个手动例程,所有开发人员都需要手动编辑生成/导入的项目设置是不可行的。
编辑: 有一个开放的 Eclipse 错误报告,请参阅Eclipse bug 536847。似乎尚不支持,但也许有人可以提出解决方法?
【问题讨论】:
标签: java eclipse maven junit java-module