如何将包和类导出到 Java 应用程序中的测试模块?

问题描述

我想构建一个包含以下模块的多模块 SpringBoot 应用程序:

  • App:父模块,主类在这里

  • 模型:所有领域对象,没有主类,没有测试

  • 测试:专用于整个应用测试,将进行 Cucumber 测试

我的问题是:

我实际上可以在 Tests 模块中对 Model 的对象运行单元测试,但在 App 模块上执行 mvn clean install失败,因为 Tests 模块对 Model 的对象一无所知。

  • 一方面,Spring 可以完成工作,导入所有需要的类 来自 Model 模块并对其运行测试。

  • 另一方面,Maven 因以下错误而哭泣: package com.my-app.model.my-package does not exist

好的,Spring 和 Maven 是 2 个不同的工具,但是我应该在应用程序的 POM 中做什么来明确声明模型模块中的所有对象都应该导出到测试模块以进行测试?

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.humanresources.game</groupId>
    <artifactId>hrg-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Application</name>
    <description>Human Resources game engine</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <modules>
        <module>../hrg-model</module>
        <module>../hrg-tests</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                    <mainClass>HrgAppApplication</mainClass>
                    <goal>package</goal>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

测试'模块 POM 仅在 Model 模块上声明了一个 <dependency> 块。

测试模块和模型在各自的 POM 中都没有任何 <build> 块。

here所示,一切都应该只由应用的 POM 管理。

所以我的问题是:我应该在 App 的 POM <build> 块中添加什么才能有效地将所有 Model 的包和类导出到 测试模块,以便mvn clean install整个项目?

提前致谢。

编辑:用于测试和模型模块的 POM.xml

测试/POM

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <parent>
        <groupId>com.humanresources.game</groupId>
        <artifactId>hrg-app</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../hrg-app/pom.xml</relativePath>
    </parent>

    <artifactId>hrg-tests</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>Tests</name>
    <description>Tests project</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.humanresources.game</groupId>
            <artifactId>hrg-model</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

模型/POM

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <parent>
        <groupId>com.humanresources.game</groupId>
        <artifactId>hrg-app</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../hrg-app/pom.xml</relativePath>
    </parent>

    <artifactId>hrg-model</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>Model</name>
    <description>Tests project for Human Resources game</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

</project>

mvn clean install 后的控制台输出(尽管单元测试成功):

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Application                                                        [pom]
[INFO] Model                                                              [jar]
[INFO] Tests                                                              [jar]
[INFO] 
[INFO] ------------------< com.humanresources.game:hrg-app >-------------------
[INFO] Building Application 1.0-SNAPSHOT                                  [1/3]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ hrg-app ---
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.4.3:repackage (repackage) @ hrg-app ---
[INFO] 
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ hrg-app ---
[INFO] Installing C:\Users\Fred\IdeaProjects\HumanResources\hrg-app\pom.xml to C:\Users\Fred\.m2\repository\com\humanresources\game\hrg-app\1.0-SNAPSHOT\hrg-app-1.0-SNAPSHOT.pom
[INFO] 
[INFO] -----------------< com.humanresources.game:hrg-model >------------------
[INFO] Building Model 0.0.1-SNAPSHOT                                      [2/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ hrg-model ---
[INFO] Deleting C:\Users\Fred\IdeaProjects\HumanResources\hrg-model\target
[INFO] 
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ hrg-model ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ hrg-model ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 11 source files to C:\Users\Fred\IdeaProjects\HumanResources\hrg-model\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ hrg-model ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory C:\Users\Fred\IdeaProjects\HumanResources\hrg-model\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ hrg-model ---
[INFO] Changes detected - recompiling the module!
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ hrg-model ---
[INFO] 
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ hrg-model ---
[INFO] Building jar: C:\Users\Fred\IdeaProjects\HumanResources\hrg-model\target\hrg-model-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.4.3:repackage (repackage) @ hrg-model ---
[INFO] Replacing main artifact with repackaged archive
[INFO] 
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ hrg-model ---
[INFO] Installing C:\Users\Fred\IdeaProjects\HumanResources\hrg-model\target\hrg-model-0.0.1-SNAPSHOT.jar to C:\Users\Fred\.m2\repository\com\humanresources\game\hrg-model\0.0.1-SNAPSHOT\hrg-model-0.0.1-SNAPSHOT.jar
[INFO] Installing C:\Users\Fred\IdeaProjects\HumanResources\hrg-model\pom.xml to C:\Users\Fred\.m2\repository\com\humanresources\game\hrg-model\0.0.1-SNAPSHOT\hrg-model-0.0.1-SNAPSHOT.pom
[INFO] 
[INFO] -----------------< com.humanresources.game:hrg-tests >------------------
[INFO] Building Tests 0.0.1-SNAPSHOT                                      [3/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ hrg-tests ---
[INFO] Deleting C:\Users\Fred\IdeaProjects\HumanResources\hrg-tests\target
[INFO] 
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ hrg-tests ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ hrg-tests ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Users\Fred\IdeaProjects\HumanResources\hrg-tests\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ hrg-tests ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory C:\Users\Fred\IdeaProjects\HumanResources\hrg-tests\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ hrg-tests ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Users\Fred\IdeaProjects\HumanResources\hrg-tests\target\test-classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/Fred/IdeaProjects/HumanResources/hrg-tests/src/test/java/com/humanresources/game/hrgtests/HrgTestsApplicationTests.java:[3,42] package com.humanresources.game.model.card does not exist
[ERROR] /C:/Users/Fred/IdeaProjects/HumanResources/hrg-tests/src/test/java/com/humanresources/game/hrgtests/HrgTestsApplicationTests.java:[4,47] package com.humanresources.game.model.territory does not exist
[ERROR] /C:/Users/Fred/IdeaProjects/HumanResources/hrg-tests/src/test/java/com/humanresources/game/hrgtests/HrgTestsApplicationTests.java:[5,47] package com.humanresources.game.model.territory does not exist
[INFO] 3 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Application 1.0-SNAPSHOT ........................... SUCCESS [  1.533 s]
[INFO] Model 0.0.1-SNAPSHOT ............................... SUCCESS [  5.104 s]
[INFO] Tests 0.0.1-SNAPSHOT ............................... FAILURE [  3.715 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  10.771 s
[INFO] Finished at: 2021-02-21T18:33:11+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile (default-testCompile) on project hrg-tests: Compilation failure: Compilation failure: 
[ERROR] /C:/Users/Fred/IdeaProjects/HumanResources/hrg-tests/src/test/java/com/humanresources/game/hrgtests/HrgTestsApplicationTests.java:[3,47] package com.humanresources.game.model.territory does not exist

查看 mvn clean install 后的屏幕截图:

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)