如何让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
相关产品推荐
相关产品推荐

