【问题标题】:mvn clean install compilation failure for JUnit 5JUnit 5 的 mvn clean install 编译失败
【发布时间】:2022-02-11 18:04:08
【问题描述】:

我在 2 个项目中运行 Junit 5 测试。在一个项目中,相同的设置工作正常,测试运行没有问题。

在另一个项目中,我一直低于编译错误。依赖项添加到 PoM 文件中,当从 eclipse 运行时,测试运行没有错误。只是 mvn clean install 失败。我查看了类似错误的各种帖子,但它并没有解决我的问题。任何线索都会非常有帮助。其他项目中的相同 pom 文件可以正常工作。

错误: 无法在项目 junit5-sampletests 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile):编译失败:编译失败: [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestDemoClass2.java:[3,29] 包 org.junit.jupiter.api 不存在 [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestBaseClass.java:[3,29] 包 org.junit.jupiter.api 不存在 [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestBaseClass.java:[4,29] 包 org.junit.jupiter.api 不存在 [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestDemoClass1.java:[3,29] 包 org.junit.jupiter.api 不存在 [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestDemoClass3.java:[3,29] 包 org.junit.jupiter.api 不存在 [错误] /E:/BestX/Workspace/junit5-sampletests/src/test/java/demoTest/TestDemoClass2.java:[7,10] 找不到符号

我的 pom 文件的内容:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>demo</groupId>
    <artifactId>junit5-sampletests</artifactId>
    <version>1.0.1</version>
    <packaging>jar</packaging>

    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.22.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.0</version>

                <dependencies>
                    <dependency>
                        <groupId>org.junit.platform</groupId>
                        <artifactId>junit-platform-surefire-provider</artifactId>
                        <version>1.3.2</version>
                    </dependency>
                </dependencies>
                <configuration>

                    <includes>
                        <include>**/*.java</include>
                    </includes>
                    <additionalClasspathElements>
                        <additionalClasspathElement>src/test/java/</additionalClasspathElement>
                    </additionalClasspathElements>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <version>2.22.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <outputDirectory>${basedir}/target/site/surefire-report.html</outputDirectory>
                </configuration>

            </plugin>
        </plugins>
    </reporting>
    <repositories>
        <repository>
            <id>maven-repository</id>
            <url>file:///${project.basedir}/maven-repository</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <scope>test</scope>
            <version>1.8.2</version>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite-api</artifactId>
            <version>1.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

Eclipse 中的结构:

到目前为止,测试非常简单,因为我正在尝试创建和原型化 junit5 framwrok。测试文件之一是:

package demoTest;

导入 org.junit.jupiter.api.Test;

/**

  • @author ayesha

*/ 公共类 TestDemoClass3 扩展 TestBaseClass {

@Test
public void test5() throws Exception {
    System.out.println("Test 1 from DemoClass 3 "  +Thread.currentThread().getName());
}

@Test

public void test6() throws Exception {
    System.out.println("Test 2 from DemoClass 3 " + Thread.currentThread().getName());

}

}

【问题讨论】:

  • 首先遵循约定不要重新定义 sourceDirectory 除非你 100% 知道你在做什么......(usr 默认目录布局src/main/java/&lt;package&gt; 生产代码..src/test/java/&lt;packageName&gt; 单元测试`等)此外,为什么要定义maven-jar-plugintest-jar 目标... 为什么要使用maven-dependency-plugin 来复制???进入lib目录?除此之外,您的错误是:package org.junit.jupiter.api does not exist ... 定义了至少版本为 2.22.2 以支持 JUnit Jupiter 5.X 的surefire/failsafe 插件,还删除了显式的surefire-provider ....
  • 还要从 maven-surefire-plugin 中删除整个配置,因为如果您遵循除此之外不需要的约定是错误的...毕竟决定使用 JUnit Jupiter 或 JUnit 4...还请显示您的一项测试,特别是无法编译的测试等...
  • @khmarbaise:我根据您的指导编辑了 pom。将依赖项复制到 lib 中,因为在将 junit 平台的所有必需依赖项存储在 lib 中之后,我将签署命令行以触发 JUNIT 5 测试。不过,这在其他设置中效果很好。还添加了示例代码。更换pom后错误依旧没有消失
  • Copyign dependency into lib as I will be sign command line to trigger JUNIT 5 tests ...?你能更详细地解释一下吗?简单示例:github.com/khmarbaise/example-junitjupiter(TestBaseClass.java 中的问题)。在单元测试中使用继承通常是个坏主意...
  • @khmarbaise 计划是使用 java 命令和平台运行程序从命令行执行 Junit5 测试。此命令所需的 jar 位于 lib 目录中。我可以跳过这一步,将 jar 一次复制到 lib 目录。但 porblem 似乎在其他地方。我可以使用完全相同的 pom 运行脚本并为 otehr 项目设置。我认为这与项目设置或其他东西有关。但无法确定原因。在我看来更像是一个 Maven 问题

标签: maven junit-jupiter


【解决方案1】:

src 标签被添加到 pom 文件中。删除这个,效果很好。

【讨论】:

    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2014-03-30
    相关资源
    最近更新 更多