Kotlin多平台移动项目构建报错:Ivy仓库来源及移除方案咨询
KMM项目Xcode构建配置错误问题解答
1. 为何项目在部分机器上可正常构建,其他机器却失败?
核心是Gradle仓库管理规则或版本的差异:
- 部分机器的Gradle未启用
PREFER_SETTINGS模式(该模式强制优先使用settings.gradle.kts中声明的仓库,禁止项目构建脚本新增仓库),所以即使隐式引入Ivy仓库也不会触发错误; - 另一部分机器的
settings.gradle.kts中明确配置了dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) },或者使用了对仓库管理更严格的Gradle新版本,此时构建脚本中新增仓库就会直接报错; - 不同机器的全局Gradle配置(如
~/.gradle/init.gradle)可能存在差异,导致仓库加载逻辑不同。
2. 什么是Ivy仓库?如何移除它并使用指定的Maven仓库?
- Ivy是Apache推出的依赖管理工具,Ivy仓库是采用Ivy格式存储依赖的仓库,和目前KMM项目主流使用的Maven仓库(如mavenCentral、Google仓库)格式不同。
- 移除Ivy仓库并改用指定Maven仓库的操作步骤:
- 统一在项目根目录的
settings.gradle.kts中配置仓库管理规则,禁用项目构建脚本添加仓库的权限:dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { gradlePluginPortal() google() mavenCentral() } } - 检查并删除所有模块
build.gradle.kts中额外添加的仓库配置; - 升级Kotlin Gradle插件到稳定新版本(如1.9.x+),旧版插件可能会隐式引入Ivy仓库,新版本已修复该问题。
- 统一在项目根目录的
3. 未显式配置的Ivy引用来自何处?
- 旧版Gradle插件:你当前使用的Kotlin Gradle插件1.7.10属于较旧版本,部分早期KMM/Kotlin插件会在内部逻辑中隐式引入Ivy仓库,用于兼容特定依赖;
- 全局Gradle配置:不同机器的
~/.gradle/init.gradle或~/.gradle/init.gradle.kts文件可能添加了Ivy仓库,导致项目构建时加载该仓库; - 第三方依赖/插件:项目依赖的某些第三方库或插件,可能在其内部脚本中添加了Ivy仓库引用。
内容的提问来源于stack exchange,提问作者Martin Mlostek
相关产品推荐
相关产品推荐

