【问题标题】:Junit test classes compile error in java 11?java 11中的Junit测试类编译错误?
【发布时间】:2021-07-14 17:47:07
【问题描述】:

我正在从 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

我已尝试添加 &lt;release&gt;11&lt;/release&gt; ...但仍然遇到相同的错误。 我们需要在 pom 文件中额外添加什么来编译测试类吗?

【问题讨论】:

  • 请显示类的源代码和完整的错误信息
  • 你在哪里找到了java源文件A.javaaTest.java

标签: maven junit maven-plugin java-11 javacompiler


【解决方案1】:
  1. Java 主类和测试类的标准目录是src/main/javasrc/test/java,而不仅仅是src/mainsrc/test,参见Introduction to the Standard Directory Layout
  1. 在这些目录中是 Java 源文件 (*.java),而不是编译的类文件 (*.class)。

  2. 为什么要在编译器插件上声明&lt;executions&gt;?见Configuring Your Compiler Plugin:

由于编译器插件在其阶段自动执行,因此您不必像许多其他插件那样输入executions

  1. Maven Surefire Plugin / Inclusions and Exclusions of Tests:

默认情况下,Surefire 插件会自动包含所有具有以下通配符模式的测试类:

  • ...
  • "**/*Test.java" - 包括其所有子目录和所有以“Test”结尾的 Java 文件名。

我不确定Atest.java 是否在此范围内。

【讨论】:

  • 感谢您的回复。我尝试过同样的方法……它在 java 11 中不起作用……java 8 没有问题。
猜你喜欢
  • 2010-11-11
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
相关资源
最近更新 更多