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
来使用存储库中的任何依赖项,而不是直接从中央存储库中使用,这也意味着集成测试将从中使用它们的依赖项
回购
除此之外,使用用户本地缓存将无法(或至少更复杂)创建具有预定义状态(这意味着已经存在的工件)的本地缓存来测试特定场景。
我正在使用 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
来使用存储库中的任何依赖项,而不是直接从中央存储库中使用,这也意味着集成测试将从中使用它们的依赖项
回购
除此之外,使用用户本地缓存将无法(或至少更复杂)创建具有预定义状态(这意味着已经存在的工件)的本地缓存来测试特定场景。