请忽略此问题。由于未知的原因,当我再看一眼这个项目时,它就开始工作了。在阅读了堆栈溢出问题中的这个页面后,我选择关闭它(而不是删除它(
使用Java 9模块时,如何使测试依赖关系在多模块maven项目中工作?
鉴于我有以下项目结构:
+ pom.xml
|
+ first
| + pom.xml
| + src/main/java/
| + module-info.java
| + com/example/first/First.java
|
+ second
| + pom.xml
| + src/main/java/
| + module-info.java
| + com/example/second/Second.java
| + src/test/java/
| + com/example/second/SecondTest.java
第一个模块
first
项目中的module-info.java
文件如下所示:
module com.example.first {
exports com.example.first;
}
以及相应的pom.xml
文件:
<artifactId>first</artifactId>
<groupId>com.example</groupId>
第二模块
我希望second
模块应该对first
模块具有测试依赖性。出于这个原因,我尝试了以下配置。
second
项目中的module-info.java
文件:
module com.example.second {
exports com.example.second;
}
pom.xml
文件:
<artifactId>second</artifactId>
<groupId>com.example</groupId>
<dependencies>
<dependency>
<artifactId>first</artifactId>
<groupId>com.example</groupId>
<scope>test</test>
</dependency>
</dependencies>
并且SecondTest.java
文件包括First
作为依赖项:
package com.example.second;
import com.example.first.First;
public class SecondTest {
First first;
Second second;
// setup and test methods...
}
问题
采用上述配置,测试编译失败:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile (default-testCompile) on project second: Compilation failure: Compilation failure:
[ERROR] [...]/src/com/example/SecondTest.java: cannot find symbol
[ERROR] symbol: class First
[ERROR] location: package com.example.first
变通办法
我可以将的pom.xml
文件中的com.example.first
的范围更改为compile
,并在second
模块的module-info.java
文件中添加requires com.example.first
,测试编译就可以工作了。然而,这也意味着second
模块在其他地方使用时将依赖于first
,这是不希望的。
Do:
module com.example.second {
requires com.example.first;
}
(另外(秒/src/test/java
!
而在second/src/main/java
中,我们可以将其保持为:
module com.example.second {
exports com.example.second;
}
如(第二(pom(仅(:
<dependency>
<groupId>com.example</groupId>
<artifactId>first</artifactId>
<scope>test</test>
</dependency>
要使模块工作,我们需要maven-compiler-plugin
>=3.6