【发布时间】:2020-05-28 13:05:55
【问题描述】:
在这个项目中,我有一个模块化设置。有一个包含两个模块的父级。
这是来自 parent-pom.xml 的 sn-p:
<modules>
<module>moduleA</module>
<module>moduleB</module>
</modules>
两个模块都有一个module-info.java。这是 moduleB 的 module-info.java:
module moduleB {
requires spring.web;
requires static lombok;
requires java.validation;
requires swagger.annotations;
requires slf4j.api;
exports com.example.service
}
在 moduleB 中有 main 文件夹和 test 文件夹,就像任何常规的 java 项目一样。在 test-folder 中有一个 JUnit5 测试,它试图在同一个包中测试一个服务,但是在 src-folder 中。
在尝试此操作时,我收到以下错误消息:
module moduleB does not "opens com.example.service" to unnamed module @67205a84
据我了解,所有不属于模块的依赖项都将打包在一个“未命名”模块中。在这种情况下模块@67205a84。我希望在这个模块中出现的东西是 Mockito 之类的东西,我只用于测试。如果我对这个假设有误,请纠正我。
当我打开我的 moduleB(通过在 moduledecleration 之前添加单词“open”)时,测试运行顺利。但显然这不是我想要的。
所以我的问题真的是:我可以打开未命名的模块以便我的测试可以运行,但我的模块对于测试以外的任何东西都保持关闭状态?
这是目录结构的简化概述。
- parent
|
-> - pom.xml
- moduleA
- moduleB
|
-> - pom.xml
- src
|
-> - main
|
-> - java
|
-> - module.info
- com.example.service
|
-> - ModuleBService.java
- test
|
-> - java
|
-> - com.example
|
-> - Application.java
- com.example.service
|
-> - ModuleBServiceTest.java
事实证明,Application.class 的位置是相关的。我要测试的模块没有使用@SpringbootApplication 注释的类,因为它只是一个库。为了测试它的功能,我必须在测试中启动一个 SpringbootApplication。当 Application.java 与 ModuleBServiceTest.java 在同一个包中时,一切都很好。当我将它移出另一个包时,会出现上面的错误消息。这是为什么呢?
【问题讨论】:
标签: java junit5 java-module