Gradle中克隆implementation配置并设置isCanBeResolved=true的方案咨询
Gradle中克隆implementation配置并设置isCanBeResolved=true的方案咨询
我完全懂你遇到的这个困扰——直接修改implementation配置的isCanBeResolved属性确实会触发Gradle的弃用警告,而且官方升级指南里的说明也不够直白。别担心,咱们可以通过克隆原配置并调整属性的方式来解决这个问题,既满足生成javadocs的需求,又符合Gradle的配置规范。
核心思路
Gradle 8.x之后严格要求配置的“角色”(可解析/可消费)在创建时就确定,不能后期修改。implementation这类预定义配置的角色是“可消费”(用于传递依赖给其他模块),所以直接修改它的可解析属性会触发警告。我们的解决方案是:新建一个专门用于解析的配置,让它继承implementation的所有依赖和规则,再标记它为可解析。
Kotlin DSL(build.gradle.kts)实现代码
// 新建一个可解析的配置,命名可自定义比如implementationResolvable val implementationResolvable by configurations.creating { // 完整继承implementation配置的所有依赖、排除规则等 extendsFrom(configurations.implementation.get()) // 创建时就标记该配置可被解析 isCanBeResolved = true // 明确该配置仅用于解析,不对外提供依赖(可选,但更规范) isCanBeConsumed = false } // 在javadoc任务中使用这个新配置 tasks.javadoc { classpath = implementationResolvable }
Groovy DSL(build.gradle)实现代码
如果你用的是Groovy风格的构建脚本,写法如下:
// 新建可解析配置 configurations.create('implementationResolvable') { extendsFrom configurations.implementation canBeResolved = true canBeConsumed = false } // 给javadoc任务配置类路径 tasks.javadoc { classpath = configurations.implementationResolvable }
关键说明
- 新建配置时就设置
isCanBeResolved = true,完全符合Gradle的最新规范,不会触发任何警告,也能兼容未来的9.0版本 extendsFrom方法会自动同步implementation的所有依赖信息,不需要手动复制或维护两份依赖配置- 标记
isCanBeConsumed = false是为了明确这个配置的用途,避免被错误地用作对外提供依赖的配置
内容来源于stack exchange
相关产品推荐
相关产品推荐

