如何阻止KMP应用中iOS构件发布至Maven仓库?
问题原因
你遇到的报错是因为Gradle的配置阶段顺序问题:当你在publications的configureEach里直接调用tasks.named()时,对应的iOS发布任务还没被Gradle创建出来。Gradle会先配置publications,之后才会生成对应的发布任务,所以此时查找任务必然失败。
解决方案
这里提供三种可行的修复方式,你可以根据需求选择:
方式1:延迟到配置阶段结束后再修改任务状态
通过afterEvaluate让任务配置逻辑延迟到所有项目配置完成、任务都创建好之后执行:
publishing { publications { withType(MavenPublication).configureEach { if (name.toLowerCase().contains("ios")) { project.afterEvaluate { tasks.named("publish${name.capitalize()}PublicationToMavenRepository").configure { enabled = false } } } } } }
方式2:直接移除iOS相关的Publication(更彻底)
从根源上不让iOS的Publication生成,自然就不会创建对应的发布任务:
publishing { publications { // 先移除所有包含"ios"的publication matching { pub -> pub.name.toLowerCase().contains("ios") }.all { remove(it) } // 再配置剩余的Android等publication withType(MavenPublication).configureEach { // 这里写你的通用配置,比如groupId、artifactId、version等 groupId = "com.your.group" artifactId = "shared" version = "1.0.0" } } }
方式3:批量过滤发布任务
直接针对PublishToMavenRepository类型的任务进行过滤,禁用所有iOS相关的任务:
tasks.withType(PublishToMavenRepository).configureEach { if (name.toLowerCase().contains("ios")) { enabled = false } }
内容的提问来源于stack exchange,提问作者dev0708
相关产品推荐
相关产品推荐

