Java 9 模块和 JUnit 4

标签 java eclipse junit4 java-9 java-platform-module-system

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/

相关文章:

java - 将 Wicket Repeater 与支持 map 一起使用

python - 调试网络应用程序

java - 在 IntelliJ 中使用 CHelper 插件进行编码竞赛

java - 带有 SpringRunner.class 的 JUnit @Category 注释

java - junit 重新加载类

java - Gin 1.5 和 GWT 2.4 出现 NoClassDefFoundError

java - 在 Hibernate 中优雅地处理 ConstraintValidationExceptions

java - 图像作为组件问题

java - 没有适用于 org.eclipse.swt.win32.win32 的版本 :x86_64:jar

java - PowerMock 抛出 java.lang.ExceptionInInitializerError