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

时间:2019-12-19 16:12:31

标签: gradle kotlin kotlin-multiplatform

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

gradle wrapper --gradle-version 6.0.1 --distribution-type all

现在我的构建正在中断。它无法识别我添加为项目依赖项的通用模块:

dependencies {
    commonMainApi("mygroup:mylib:$myversion")
}

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

我唯一要做的就是升级到Gradle 6.0.1。如果恢复到先前的状态,我的构建就可以了。我在做什么错了?

1 个答案:

答案 0 :(得分:3)

这很可能与以下事实有关:Gradle 6.0+不会急于从存储库请求*.module元数据文件,除非模块的*.pom包含特殊标记,而该标记在*.pom发行了较早的Gradle版本(我认为是5.3之前的版本)

需要这些*.module元数据文件来正确地解释单个依赖关系,这既是用于分析项目的通用源的通用代码元数据,又是针对其构建目标的特定于平台的工件。否则,该依赖项将被解析为完全没有构件的库根模块。

要在消费者方面解决此问题,您可以通过在构建脚本的存储库声明中添加以下语句,使Gradle请求这些*.module元数据文件:

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

在Gradle文档中:Supported metadata sources


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