You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenRewrite测试中让pomXml忽略版本或校验版本更高?

解决RewriteTest依赖版本测试的两种方案

针对你用Kotlin写的UpgradeNonSpringDependenciesTest测试类,遇到新版本发布导致测试失败的问题,有两种可行的解决思路:

方案一:忽略版本校验

如果只需要确认自定义Recipe成功触发了依赖升级动作,不需要绑定到具体版本号,可以修改断言逻辑,只校验依赖的groupId和artifactId,完全忽略版本:

@Test
fun upgradeKafkaCore() = runRecipe(UpgradeNonSpringDependenciesTest()) {
    pomXml {
        // 仅验证kafka-core依赖存在,不限制版本
        hasDependency("org.apache.kafka", "kafka-core")
        // 可选:确保旧版本1.0.1已经被替换掉
        doesNotHaveDependency("org.apache.kafka", "kafka-core", "1.0.1")
    }
}

也可以用XPath直接匹配依赖节点,跳过版本校验:

@Test
fun upgradeKafkaCore() = runRecipe(UpgradeNonSpringDependenciesTest()) {
    pomXml {
        matchesXpath("//dependency[groupId='org.apache.kafka' and artifactId='kafka-core']")
    }
}

方案二:校验版本高于指定旧版本

如果需要确保升级后的版本不低于某个最低标准(比如必须高于1.0.1),可以借助Rewrite的版本处理工具或者Maven版本范围来实现:

方式1:手动解析并比较版本

import org.openrewrite.java.dependencies.Version

@Test
fun upgradeKafkaCoreVersionMeetsMinimum() = runRecipe(UpgradeNonSpringDependenciesTest()) {
    pomXml {
        val requiredMinVersion = Version.parse("1.0.1")
        // 获取pom中kafka-core的实际版本
        val actualVersionStr = evaluateXpath("//dependency[groupId='org.apache.kafka' and artifactId='kafka-core']/version/text()")
        val actualVersion = Version.parse(actualVersionStr)
        
        // 断言实际版本严格大于旧版本
        check(actualVersion > requiredMinVersion) {
            "kafka-core当前版本$actualVersionStr 未满足高于$requiredMinVersion的要求"
        }
    }
}

方式2:用Maven版本范围断言

直接利用Rewrite的hasDependency方法支持Maven版本范围的特性,指定版本必须大于1.0.1:

@Test
fun upgradeKafkaCoreVersionMeetsMinimum() = runRecipe(UpgradeNonSpringDependenciesTest()) {
    pomXml {
        // [1.0.2,) 表示版本≥1.0.2,也就是所有高于1.0.1的版本
        hasDependency("org.apache.kafka", "kafka-core", "[1.0.2,)")
    }
}

内容的提问来源于stack exchange,提问作者JGleason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:14:53