eclipse 氧; Windows 7的; JDK 9 final 来自 9, 21; JUnit 4.12 和现有应用程序。作为起点,可以编译、执行应用程序,并且所有 JUnit 测试都显示为绿色。现在我们使用eclipse生成文件module-info.java。结果看起来像:
module ch.commcity.topsort {
exports ch.commcity.topsort;
requires junit;
}
但出现错误:junit 无法解析为模块。 问题是:如何告诉文件junit没有定义任何模块,它应该以兼容模式运行?
最佳答案
How to tell the file that junit does not define any module and it should be run in compatibility mode?
您的问题似乎是基于几个误解:
- 您无法告诉
module-info.java
JUnit 是否定义了一个模块。如果一个模块说它需要另一个模块,那么编译器会期望该模块存在 - 没有办法解决这个问题。 - JUnit 4 是否作为模块提供并不太重要 - 只要将它放在模块路径上,它最终将被视为模块(可能是 an automatic one)。
- 没有“兼容模式”。您可以(几乎)像使用模块系统之前那样继续编写代码,但是一旦您创建了模块声明,您就需要遵守它的规则。
我推荐给优秀的State of the Module System彻底阅读,然后问问自己你到底想完成什么。您真的要创建一个依赖于 JUnit 的模块吗?或者这只是偶然的,因为您使用它的 API 进行测试。如果是后者,您不应该依赖它 - 相反,您的 IDE/构建工具需要弄清楚如何编译和运行您的测试。
对“依赖于 JUnit 的模块”的扩展
模块系统不会将依赖项分类为“编译”或“测试”——如果一个模块需要
另一个模块,它必须存在,总是。这意味着 需要 junit
的模块将强制存在 JUnit。除非该模块提供与测试相关的功能,否则这肯定是错误的。
换句话说,需要 junit
类似于将 JUnit 添加到项目的 POM,使用 compile
scope .
关于Java 9 模块和 JUnit 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46456826/