Maven 集成测试框架强制从中央存储库进行依赖解析

Maven Integration Testing Framework forces dependency resolution from central repository

我正在使用 Maven Integration Testing Framework 插件来测试自定义开发插件的一个目标。就测试而言,一切正常。但是,我注意到了一项意想不到的技术细节:

target/maven-it/.../test-case/.m2/repository 中的单个测试用例创建的本地存储库始终从 Maven Central Repository 远程填充。如果我 运行 mvn clean integration-test 没有连接到 Internet,依赖项解析会在连接尝试失败后导致错误。但是,我希望它首先在位于 USER/.m2/repository 的“标准”缓存中查找依赖项,在我的实验中已经存在依赖项。

有趣的是,即使在 mvn clean integration-test 中添加 --offline 选项后,仍然尝试在线依赖解析。

我的主要问题是 - 这应该发生吗?这是使用 Maven 集成测试框架时的预期行为吗?还是您认为我的使用方式有问题?

来自测试自定义开发插件pom.xml的相关依赖:

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>${junit.platform.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.16.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.soebes.itf.jupiter.extension</groupId>
            <artifactId>itf-jupiter-extension</artifactId>
            <version>0.11.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.soebes.itf.jupiter.extension</groupId>
            <artifactId>itf-assertj</artifactId>
            <version>0.11.0</version>
            <scope>test</scope>
        </dependency>

相关插件:

            <plugin>
                <groupId>com.soebes.itf.jupiter.extension</groupId>
                <artifactId>itf-maven-plugin</artifactId>
                <version>0.11.0</version>
                <executions>
                    <execution>
                        <id>installing</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>install</goal>
                            <goal>resources-its</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>3.0.0-M5</version>
                <configuration>
                  <systemProperties>
                    <maven.version>${maven.version}</maven.version>
                    <maven.home>${maven.home}</maven.home>
                  </systemProperties>
                </configuration>
                <executions>
                  <execution>
                    <goals>
                      <goal>integration-test</goal>
                      <goal>verify</goal>
                    </goals>
                  </execution>
                </executions>
            </plugin>

如果从用户本地缓存中消耗依赖项 $HOME/.m2/repository 已经在本地缓存中的部分可能会影响集成测试。这就是每个集成测试彼此完全分离的原因之一。

此外,它使得以更简单的方式并行化集成测试成为可能。

此外,您可以配置自己的 settings.xml 来使用存储库中的任何依赖项,而不是直接从中央存储库中使用,这也意味着集成测试将从中使用它们的依赖项 回购

除此之外,使用用户本地缓存将无法(或至少更复杂)创建具有预定义状态(这意味着已经存在的工件)的本地缓存来测试特定场景。