从 Gradle 5.1.1 升级到 6.0.1 破坏了 Kotlin 多平台构建

Ada*_*old 5 gradle kotlin kotlin-multiplatform

我已经升级了我的 Kotlin 多平台项目以使用 Gradle 6.0.1

gradle wrapper --gradle-version 6.0.1 --distribution-type all
Run Code Online (Sandbox Code Playgroud)

现在我的构建正在崩溃。它无法识别我添加为项目依赖项的常见模块:

dependencies {
    commonMainApi("mygroup:mylib:$myversion")
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Kotlin DSL,这个项目也是一个多平台项目。我得到的是一堵文本墙,详细说明了所有无法解析的导入(所有导入都应该是从common我的依赖项中的common模块导入到我的项目中的模块)。

我所做的唯一一件事就是升级到 Gradle 6.0.1。如果我恢复以前的状态,我的构建就可以了。我究竟做错了什么?

hot*_*key 5

这很可能与 Gradle 6.0+ 不会急切地*.module从存储库请求元数据文件有关,除非*.pom模块的 包含特殊标记,而在*.pom旧版 Gradle 版本(5.3 之前,我相信)发布的 s中不存在该标记)

需要这些*.module元数据文件来正确地将单个依赖项解释为用于分析项目的公共源的公共代码元数据以及构建目标所针对的特定于平台的工件。如果没有它,依赖关系就会解析为库的根模块,而该模块根本没有任何工件。

要在使用者端修复此问题,您可以*.module通过将此语句添加到构建脚本中的存储库声明中来使 Gradle 请求这些元数据文件:

repositories {
    jcenter { 
        metadataSources { 
            gradleMetadata()
            mavenPom() 
        }
    }
    // or, if you are using a custom Maven repository:
    maven("https://my.repo.com") { 
        metadataSources { 
            gradleMetadata()
            mavenPom() 
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Gradle 文档中:支持的元数据源


UPD: JitPack 似乎从 POM 中删除了 Gradle 模块元数据标记 ( <!-- do_not_remove: published-with-gradle-metadata -->),这导致 Gradle 不请求*.module元数据文件。也可以使用与上述类似的解决方法。