Java 9模块和JUnit 4
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没有定义任何模块,它应该在兼容模式下运行?
如何告诉文件junit没有定义任何模块,它应该在兼容模式下运行?
你的问题似乎是基于几个误解:
- 你不能告诉
module-info.java
JUnit是否定义了一个模块。 如果一个模块说它需要另一个模块,那么编译器希望该模块存在 – 没有办法解决这个问题。 - JUnit 4是否作为模块出现并不是特别重要 – 只要将它放在模块路径上,它最终将被视为一个模块(可能是一个模块)。
- 没有“兼容模式”。 您可以像在模块系统之前那样继续编写代码(几乎),但是一旦创建了模块声明,就需要按照规则进行操作。
我建议对模块系统的优秀状态进行全面阅读,然后问问自己究竟要完成什么。 你真的想创建一个依赖于JUnit的模块吗? 或者这只是偶然的,因为您使用其API进行测试。 如果是后者,则不应该依赖它 – 而是您的IDE /构建工具需要弄清楚如何编译和运行测试。
扩展“依赖于JUnit的模块”
模块系统不将依赖关系分类为“编译”或“测试” – 如果模块requires
另一个模块,则必须始终存在。 这意味着requires junit
的模块会强制存在JUnit。 除非模块提供与测试相关的function,否则这肯定是错误的。
换句话说, requires junit
类似于使用compile
范围将JUnit添加到项目的POM中。
首先,请更新Eclipse Oxygen的Java 9支持或使用Eclipse 4.7.1a的最新可用候选版本(将于2017年10月11日发布)。
要将库或容器添加到Eclipse中Java 9项目的模块路径 ,请打开项目的Java Build Path对话框。 在Libraries选项卡上,选择节点Modulepath并将库添加到其中。 确保首先从Classpath节点中删除该库(如果该库已存在)。
正如其他人所提到的,在您的情况下,JUnit库将被视为自动模块。
如何告诉文件junit没有定义任何模块,它应该在兼容模式下运行?
由于在module-info中生成的模块junit
将是从其工件转换的自动模块 。 您需要确保Junit junit:junit:4.12
的jar在项目的模块路径上可用,并且模块将自行解析。
为了确保上述内容,您可以检查IDE中配置的项目/模块的依赖关系,以包含junit:4.12:jar
。
- 在Eclipse中的单独JVM中运行每个JUnit测试?
- m2e:使用exec-maven-plugin生成代码
- Java – Servlet 404错误
- Struts 2 Junit测试用例执行失败(StrutsTestCase.getActionProxy:138»NullPointer)
- 添加JSON包参考; Java新手
- 如何在mongo中插入日期文件?
- 获取“ClassNotFoundException:ResteasyBootstrap”和“ClassNotFoundException:SpringContextLoaderListenerexception”
- 将Android项目转换为Eclipse中的“常规”Java项目?
- 如何在Eclipse中创建可运行的JAR,就像在Eclipse中一样