首页 > 解决方案 > 如何在我的 Maven Spring Boot 多模块项目的测试中引用兄弟模块?

问题描述

如何在 Maven 中包含兄弟模块作为我的 Spring Boot 测试的测试依赖项?

我有一个小的多模块 maven 项目,其中包含一个 Spring Boot Web 应用程序(querying-api)、一个公共库(domain-definitions)和一个初始化脚本(database-loader)。

我正在我的querying-api模块中编写测试用例来测试我的 API,并且我想在测试开始使用预定义的测试数据加载数据库之前运行我的数据库加载器服务,同时测试加载器是否仍然有效。但是我在运行时收到以下错误mvn clean package

[ERROR] Failed to execute goal on project querying-api: Could not resolve dependencies for project com.my.little.package:querying-api:jar:1.0.0: Failure to find com.my.little.package:database-loader:jar:1.0.0 in http://mycompanysnexusrepo.com/nexus/content/repositories/EAJAVA/ was cached in the local repository, resolution will not be reattempted until the update interval of EAJAVA has elapsed or updates are forced -> [Help 1]

测试引用通用域定义库没有问题......


父 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <name>my-little-project</name>
    <description>Project for my little microservice</description>
    <groupId>com.my.little.package</groupId>
    <artifactId>my-little-project</artifactId>
    <version>1.0.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring.security.version>2.3.5.RELEASE</spring.security.version>
        <springfox.version>2.7.0</springfox.version>
    </properties>

    <modules>
        <module>domain-definitions</module>
        <module>database-loader</module>
        <module>querying-api</module>
    </modules>

    <distributionManagement>
        <repository>
            <id>EAJAVA</id>
            <url>http://mycompanysnexusrepo.com/nexus/content/repositories/EAJAVA/</url>
        </repository>
    </distributionManagement>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.my.little.package</groupId>
                <artifactId>domain-definitions</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.my.little.package</groupId>
                <artifactId>database-loader</artifactId>
                <version>${project.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

querying-api POM 文件(用于查询数据库的 Spring Boot 应用程序):

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>querying-api</artifactId>
    <packaging>jar</packaging>
    <name>querying-api</name>
    <description>Spring boot app for querying the database</description>

    <parent>
        <groupId>com.my.little.package</groupId>
        <artifactId>my-little-project</artifactId>
        <version>1.0.0</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>com.my.little.package</groupId>
            <artifactId>domain-definitions</artifactId>
        </dependency>
        <dependency>
            <groupId>com.my.little.package</groupId>
            <artifactId>database-loader</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>querying-api</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.my.little.package</groupId>
        <artifactId>my-little-project</artifactId>
        <version>1.0.0</version>
    </parent>

    <artifactId>domain-definitions</artifactId>
    <name>domain-definitions</name>
    <description>Classes to define the structure of the tables</description>
</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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>database-loader</artifactId>
    <packaging>jar</packaging>
    <name>database-loader</name>
    <description>Java script to load data into the database for the first time</description>

    <parent>
        <groupId>com.my.little.package</groupId>
        <artifactId>my-little-project</artifactId>
        <version>1.0.0</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>com.my.little.package</groupId>
            <artifactId>domain-definitions</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

标签: mavenspring-bootspring-boot-testmulti-module

解决方案


这可能是因为在本地存储库中找不到库 jar。您需要先执行 :
mvn clean install。这会将 lib jar 安装在您的本地存储库中,当您执行package目标时,maven 可以轻松找到它。

此处解释:“mvn clean package”和“mvn clean install”有何不同?

此外,如果您仅在测试中使用兄弟模块,那么您可以将范围定义为依赖测试

     <dependency>
        <groupId>com.my.little.package</groupId>
        <artifactId>domain-definitions</artifactId>
        <scope>test</scope>
    </dependency>

推荐阅读