编译失败:在多模块 Maven 项目中应用模块信息.java时"cannot find symbol"?



请忽略此问题。由于未知的原因,当我再看一眼这个项目时,它就开始工作了。在阅读了堆栈溢出问题中的这个页面后,我选择关闭它(而不是删除它(


使用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

相关内容

最新更新