如何声明两个非自定义Gradle任务的依赖以解决Maven发布隐式依赖告警
问题根因
告警的本质是你给Maven发布配置指定了硬编码的本地APK文件路径作为上传产物,Gradle无法感知这个文件是packageRelease任务的输出,不知道执行发布任务前需要先执行打包任务,因此触发了隐式依赖的告警。
解决方案1(推荐:无需手动声明任务依赖)
直接将artifact的参数从硬编码的文件路径,替换为关联packageRelease任务即可,Gradle会自动识别任务的输出产物,自动建立任务依赖关系,完全规避隐式依赖告警。而且后续Android插件调整APK输出路径时,也无需修改配置,兼容性更强。
修改后的publishing配置块示例:
publishing { publications { mavenAndroid(MavenPublication) { groupId = 'com.mygroup.foo' artifactId = project.name version = '1.2.3' // 替换原来的硬编码路径写法,直接传入打包任务对象 artifact tasks.named('packageRelease') // 原有注释逻辑保留即可 // Explicitly not generating a pom dependencies node // 1) we don't need it because the APK includes all its deps. } } }
解决方案2(手动声明任务依赖)
如果因为特殊需求必须保留硬编码的文件路径写法,可以显式声明发布任务依赖packageRelease任务,配置如下:
// 仅给发布到Maven本地的任务加依赖 tasks.named('publishMavenAndroidPublicationToMavenLocal') { dependsOn tasks.named('packageRelease') } // 如果后续需要发布到远程Maven仓库,可以给所有发布任务加统一依赖 tasks.withType(PublishToMavenRepository) { dependsOn tasks.named('packageRelease') }
注意事项
- 你原配置中
version = 1.2.3'漏了开头的单引号,修改配置时可以顺手修正 - 原配置的
build.finalizedBy publishToMavenLocal会导致每次执行build任务都自动触发发布操作,如果没有强需求建议删除,需要发布时直接执行./gradlew publishToMavenLocal命令即可。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

