问题描述
我正在从 Java 8 迁移到 Java 11。我在执行 Maven 构建时遇到编译错误。
src
main
com
A.class
test
com
Atest.class
Atest.java {
A a;//compile error
}
在 pom.xml
中使用过插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<executions>
<execution>
<id>default-compile</id>
</execution>
</executions>
</plugin>
</plugins>
</build>
我收到如下错误:
[ERROR] symbol: class A
[ERROR] location: class com.Atest
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile (default-testCompile)
on project 'ourproject': Compilation failure
我尝试添加 <release>11</release>
...但仍然遇到相同的错误。
我们需要在 pom 文件中额外添加什么来编译测试类?
解决方法
- Java 主类和测试类的标准目录是
src/main/java
和src/test/java
,而不仅仅是src/main
和src/test
,请参阅 Introduction to the Standard Directory Layout。
-
在这些目录中是 Java 源文件 (
*.java
) 而不是编译的类文件 (*.class
)。 -
为什么要在编译器插件上声明
<executions>
?见Configuring Your Compiler Plugin:
由于 Compiler Plugin 在它们的阶段自动执行,因此您不必像许多其他插件一样放置 executions
。
默认情况下,Surefire 插件会自动包含所有具有以下通配符模式的测试类:
- ...
-
"**/*Test.java"
- 包括其所有子目录和所有以“Test”结尾的 Java 文件名。
我不确定 Atest.java
是否包含在此范围内。