gpt4 book ai didi

java - 多模块Maven项目中java编译失败: "cannot find symbol" when applying module-info.?

转载 作者:行者123 更新时间:2023-12-05 05:50:05 29 4
gpt4 key购买 nike

请忽略此问题。出于未知原因,当我再次查看该项目时,该项目开始运行。看完this page在 Stack Overflow 问题中,我选择关闭它(而不是删除它)。


当使用 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 模块具有测试依赖性。为此,我尝试了以下配置。

第二个项目中的

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 并添加 requires com.example.firstsecond 模块的 module-info.java 文件中,测试编译将工作。但是,这也意味着 second 模块在其他地方使用时将依赖于 first,这是不希望的。

最佳答案

做:

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!

关于java - 多模块Maven项目中java编译失败: "cannot find symbol" when applying module-info.?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70570564/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com