OpenRewrite 单元测试中启用本地 Maven 仓库的完整指南

云萱姑娘_4040

云萱姑娘_4040

2026-08-17

797人浏览

原创

OpenRewrite 单元测试中启用本地 Maven 仓库的完整指南

在 OpenRewrite 的 JUnit 测试中,若 Recipe 涉及依赖坐标(如 @@@SNAPSHOT@@@)需解析但默认不加载本地仓库,会导致 POM 插入失败注释;解决方法是通过 MavenExecutionContextView 显式配置包含本地仓库的 repositories 列表。

在 openrewrite 的 junit 测试中,若 recipe 涉及依赖坐标(如 `@@@snapshot@@@`)需解析但默认不加载本地仓库,会导致 pom 插入失败注释;解决方法是通过 `mavenexecutioncontextview` 显式配置包含本地仓库的 `repositories` 列表。

OpenRewrite 在测试环境中(如 JUnit)默认不自动加载用户本地 Maven 仓库(~/.m2/repository,也不继承项目构建时的 settings.xmlpom.xml 中定义的仓库配置。因此,当你的 Recipe 尝试解析一个仅存在于本地仓库的 SNAPSHOT 版本(例如 <version>@@@SNAPSHOT@@@</version>)时,OpenRewrite 会尝试远程下载其 POM(默认仅访问 Maven Central),失败后便生成形如 <!--~~(c:d:@@@SNAPSHOT@@@ failed. Unable to download POM...)~~>--> 的诊断注释。

要让测试环境识别本地仓库,必须在 rewriteRun() 调用中显式注入自定义的 Maven 执行上下文,并将本地仓库作为 MavenRepository 添加进去。OpenRewrite 提供了便捷的 MavenExecutionContextView 工具类来完成这一操作。

以下是推荐的实现方式(适配 OpenRewrite 8.x+):

import org.openrewrite.ExecutionContext;
import org.openrewrite.InMemoryExecutionContext;
import org.openrewrite.maven.MavenExecutionContextView;
import org.openrewrite.maven.MavenRepository;
import org.openrewrite.test.RewriteTest;
import org.junit.jupiter.api.Test;

import java.nio.file.Paths;

import static org.openrewrite.maven.Assertions.pomXml;
import static org.openrewrite.test.RewriteTest.rewriteRun;

class MyRecipeTest implements RewriteTest {

    @Test
    void shouldResolveLocalSnapshotInPom() {
        // 构建指向本地仓库的 MavenRepository(路径需根据系统调整)
        String localRepoPath = System.getProperty("user.home") + "/.m2/repository";
        MavenRepository localRepo = MavenRepository.builder()
                .id("local")
                .uri(Paths.get(localRepoPath).toUri().toString())
                .build();

        rewriteRun(
            spec -> spec
                .recipe(new YourRecipe()) // 替换为你的实际 Recipe 实例
                .executionContext(
                    MavenExecutionContextView.view(new InMemoryExecutionContext())
                        .setRepositories(List.of(localRepo)) // 关键:注入本地仓库
                ),
            pomXml(
                """
                  <project><modelversion>4.0.0</modelversion><groupid>test</groupid><artifactid>demo</artifactid><version>1.0</version><dependencies><dependency><groupid>a</groupid><artifactid>b</artifactid><version>1.0.0</version></dependency></dependencies></project>
                  """,
                """
                  <project><modelversion>4.0.0</modelversion><groupid>test</groupid><artifactid>demo</artifactid><version>1.0</version><dependencies><dependency><groupid>c</groupid><artifactid>d</artifactid><version>@@@SNAPSHOT@@@</version></dependency></dependencies></project>
                  """
            )
        );
    }
}

关键要点说明:

Maven 3.9.12
Maven 3.9.12

Maven下载页提供 Apache Maven 3.9.12 官方跨平台二进制包,并整理安装配置、环境变量和入门使用说明。

下载
  • MavenRepository.builder().uri(...) 的 URI 必须是有效的文件协议 URL(如 file:///Users/you/.m2/repository),Windows 用户注意使用正斜杠和三斜杠前缀(file:///C:/Users/you/.m2/repository);
  • 不建议硬编码路径,可复用 System.getProperty("user.home") 或通过 System.getProperty("maven.repo.local") 获取 Maven 配置的仓库路径(若测试运行时已设置该系统属性);
  • 若同时需要远程仓库(如私有 Nexus),可将多个 MavenRepository 实例一并加入 List.of(...)
  • 此配置仅作用于当前测试用例的执行上下文,不影响其他测试,符合隔离性原则。

⚠️ 注意事项:

  • 确保目标 SNAPSHOT 的 .pom.jar 文件确实存在于本地仓库对应路径(如 ~/.m2/repository/c/d/1.0.0-SNAPSHOT/d-1.0.0-SNAPSHOT.pom),否则仍会解析失败;
  • OpenRewrite 不会自动触发 mvn install,请确保 SNAPSHOT 已预先安装到本地仓库;
  • 若使用 Gradle 构建测试项目,请在 build.gradle 中确认 test 任务未屏蔽本地仓库访问(通常无需额外配置)。

通过上述方式,你就能在 JUnit 测试中精准复现生产环境的依赖解析行为,使 Recipe 测试真正具备端到端可靠性。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

maven

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

2025.09.15

2800

19

Java Maven/Gradle 构建与依赖管理合集
Java Maven/Gradle 构建与依赖管理合集

系统讲解 Java 项目构建工具的使用与进阶配置,涵盖 Maven 的 POM 文件结构、生命周期(clean/compile/package/install/deploy)与插件机制、依赖范围(compile/provided/test/runtime)与传递依赖管理、多模块聚合与继承、私有 Nexus 仓库发布,以及 Gradle 的 Groovy / Kotlin DSL 语法、Task 自定义与增量构建、依赖版本目录(Versi

2026.05.09

289

25

软件测试常用工具
软件测试常用工具

软件测试常用工具有Selenium、JUnit、Appium、JMeter、LoadRunner、Postman、TestNG、LoadUI、SoapUI、Cucumber和Robot Framework等等。测试人员可以根据具体的测试需求和技术栈选择适合的工具,提高测试效率和准确性 。

2023.10.13

3950

8

java测试工具有哪些
java测试工具有哪些

java测试工具有JUnit、TestNG、Mockito、Selenium、Apache JMeter和Cucumber。php还给大家带来了java有关的教程,欢迎大家前来学习阅读,希望对大家能有所帮助。

2023.10.23

2401

10

Java 单元测试
Java 单元测试

本专题聚焦 Java 在软件测试与持续集成流程中的实战应用,系统讲解 JUnit 单元测试框架、Mock 数据、集成测试、代码覆盖率分析、Maven 测试配置、CI/CD 流水线搭建(Jenkins、GitHub Actions)等关键内容。通过实战案例(如企业级项目自动化测试、持续交付流程搭建),帮助学习者掌握 Java 项目质量保障与自动化交付的完整体系。

2025.10.24

926

26

NumPy性能优化版本更新与常见报错排查
NumPy性能优化版本更新与常见报错排查

本专题整理 NumPy 性能优化、版本更新与常见报错排查相关教程,覆盖向量化计算、广播性能、内存布局、NumPy 2.0 升级、版本兼容冲突、安装导入报错、dtype 溢出、矩阵运算异常和 broadcasting 报错修复,帮助读者系统掌握 NumPy 性能调优与问题定位方法。

2026.09.22

0

25

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

2026.09.21

20

20

NumPy随机数文件读写与dtype数据类型
NumPy随机数文件读写与dtype数据类型

本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

2026.09.21

20

24

NumPy矩阵运算与线性代数计算
NumPy矩阵运算与线性代数计算

本专题整理 NumPy 矩阵运算与线性代数计算相关教程,覆盖矩阵乘法、dot 与 @ 运算符、逆矩阵、行列式、特征值与特征向量、SVD、线性方程组、欧氏距离、矩阵分解和大规模矩阵性能优化等内容,帮助读者掌握 np.linalg 与矩阵计算实战。

2026.09.21

0

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Apache Maven 官方安装指南
Apache Maven 官方安装指南

共0课时 | 0人学习

Apache Maven 官方用户中心
Apache Maven 官方用户中心

共0课时 | 0人学习