0

试图让Eclipse 2018-09 + Patch 与Java 11支持、m2ejunit5一起工作。

按照junit5-modular-world示例中的建议,我在test/java下引入了第二个module-info.java

Eclipse 的反应让我吃惊:

更改后我无法保存该文件。它只能通过关闭 Eclipse 来保存。但是,重新打开后,Eclipse一头雾水。它不能显示托管多个module-info.java的项目的任何详细信息,只能显示项目名称。

可能 Eclipse 用一个 Java 模块识别一个项目,而mvn test编译和执行的模块显然与mvn install创建的模块不同。

经历了很多我能想到的选择。目前我不得不放弃并退回到junit 4.12。

你知道更好的解决方案吗?

4

1 回答 1

1

Eclipse 目前不支持测试源文件夹中的辅助module-info.java文件夹(但如果您尝试这样做,它的行为可能会得到改进)。

现在,您可能根本不需要它:

Maven 将 module-info.java 中提到的依赖项放在模块路径中,所有其他依赖项(例如 junit 之类的仅测试依赖项)放在类路径中,因此它们成为未命名模块的一部分。编译测试时,会添加命令行选项,因此在主源文件夹中被视为模块一部分的测试代码仍然可以读取未命名的模块(通过添加--add-reads modulename=ALL-UNNAMED),因此 junit 对测试代码是可见的。

Eclipse Photon 和更高版本也支持这种行为。

关于辅助测试的一些背景module-info.java:maven-compiler-plugin 自 3.8 版起支持此功能(请参阅https://www.mail-archive.com/announce@maven.apache.org/msg00866.html,在问题https:// issues.apache.org/jira/browse/MCOMPILER-341),但我不知道匹配的 maven-surefire-plugin 已经发布,所以我认为你目前无法运行这些类型的测试行家。

在 Eclipse 中实现对辅助测试的支持module-info.java是可能的,只要它是module-info.java主源文件夹中主要测试的严格超集,或者只要它们指定相同的模块并且它们的内容将像“ pro”构建工具https://github.com/forax/pro。但目前还没有人对此进行研究。

在 Eclipse 中可能永远不会支持的是有一个module-info.java指定不同模块的辅助测试,因为 Eclipse 假设一个 java 项目只属于一个模块。但这无关紧要,因为这些测试只能使用主要来源的公共和导出代码,因此可以简单地将它们放入自己的 maven 模块中。

于 2018-10-14T19:56:29.037 回答