Eclipse氧气; Windows 7的; JDK 9决赛9月21日; JUnit 4.12和现有的应用程序。作为起点,可以编译,执行应用程序,并且所有JUnit测试都显示为绿色。现在我们使用eclipse生成文件module-info.java。结果如下:
module ch.commcity.topsort {
exports ch.commcity.topsort;
requires junit;
}
但是有错误:junit无法解析为模块。 问题是:如何告诉文件junit没有定义任何模块,它应该在兼容模式下运行?
答案 0 :(得分:8)
如何告诉文件junit没有定义任何模块,它应该以兼容模式运行?
您的问题似乎是基于一些误解:
module-info.java
JUnit是否定义了模块。如果一个模块说它需要另一个模块,那么编译器希望该模块存在 - 没办法解决这个问题。我建议您对杰出的State of the Module System进行彻底的阅读,然后问问自己,您究竟想要完成什么。你真的想创建一个依赖于JUnit的模块吗?或者这只是偶然的,因为您使用其API进行测试。如果是后者,则不应该依赖它 - 而是您的IDE /构建工具需要弄清楚如何编译和运行测试。
模块系统不会将依赖关系分类为" compile"或"测试" - 如果模块requires
是另一个模块,则必须存在,始终。这意味着requires junit
将强制存在JUnit的模块。除非模块提供与测试相关的功能,否则这肯定是错误的。
换句话说,requires junit
类似于使用compile
scope将JUnit添加到项目的POM中。
答案 1 :(得分:3)
首先,请更新您的Java 9 support for Eclipse Oxygen或使用Eclipse 4.7.1a的最新可用候选版本(将于2017年10月11日发布)。
要在Eclipse中的Java 9项目的模块路径中添加库或容器,请打开项目的 Java Build Path 对话框。在库标签上,选择节点模块路径,然后将库添加到该节点。确保首先从 Classpath 节点中删除该库(如果该库已存在)。
正如其他人所提到的,在您的情况下,JUnit库将被视为自动模块。
答案 2 :(得分:0)
如何告诉文件junit没有定义任何模块,它应该以兼容模式运行?
由于module-info中生成的模块junit
将是从其工件转换而来的 automatic module 。您需要确保Junit junit:junit:4.12
的jar在项目的模块路径上可用,模块将自行解析。
为了确保上述内容,您可以检查IDE中配置的项目/模块的依赖关系,以包含junit:4.12:jar
。