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

如何让Gradle正确选择Guava的jreRuntimeElements变体?

解决OpenRewrite依赖Guava时Gradle变体选择冲突问题

当Java项目中使用OpenRewrite插件,其依赖的Guava同时提供Android和JRE运行时变体,而插件未指定org.gradle.jvm.environment属性时,Gradle会无法选择变体导致构建失败。以下是几种可行的解决方法:

方法一:为OpenRewrite相关配置统一添加JVM环境属性

在build.gradle中添加配置,为所有以rewrite开头的配置指定标准JVM环境属性,确保Gradle优先选择JRE变体:

import org.gradle.api.attributes.Attribute

configurations.all {
    if (name.startsWith("rewrite")) {
        attributes.attribute(Attribute.of("org.gradle.jvm.environment", String), "standard-jvm")
    }
}

方法二:通过依赖约束强制Guava使用JRE变体

通过约束全局依赖的Guava变体,让所有依赖Guava的模块都使用标准JVM版本:

import org.gradle.api.attributes.Attribute

dependencies {
    constraints {
        implementation('com.google.guava:guava') {
            attributes {
                attribute(Attribute.of("org.gradle.jvm.environment", String), "standard-jvm")
            }
        }
    }
}

方法三:直接为OpenRewrite依赖指定变体

在声明OpenRewrite依赖时,显式指定其依赖的Guava变体属性:

import org.gradle.api.attributes.Attribute

plugins {
    id("org.openrewrite.rewrite") version "你的插件版本号"
}

rewrite {
    // 配置你的激活Recipe
}

dependencies {
    rewrite("org.openrewrite:rewrite-python:1.0.7") {
        attributes {
            attribute(Attribute.of("org.gradle.jvm.environment", String), "standard-jvm")
        }
    }
}

原理说明

问题核心在于rewriteResolveDependencies任务创建的分离配置未携带org.gradle.jvm.environment属性,导致Gradle无法区分androidRuntimeElements和jreRuntimeElements的差异。通过显式添加该属性,Gradle就能明确选择适配标准JVM的jreRuntimeElements变体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:07:44