Gradle 如何向“kotlin multiplatform”插件创建的特定平台目标添加项目依赖项?

Gradle 如何向“kotlin multiplatform”插件创建的特定平台目标添加项目依赖项?,gradle,kotlin,kotlin-multiplatform,Gradle,Kotlin,Kotlin Multiplatform,以前,使用Gradle构建多平台项目依赖于每个目标平台的单独Gradle插件:kotlin platform common、kotlin platform js、以及kotlin platform jvm ,现在使用一个kotlin multiplatform插件将其统一 然而,在我的项目中,我有多个多平台项目,它们之间有一些依赖关系。使用旧的多平台配置,每个不同的平台都是一个单独的模块,需要在项目之间添加依赖项,将每个平台特定模块中的项目引用添加到其他项目中的相应模块:例如,project(“

以前,使用Gradle构建多平台项目依赖于每个目标平台的单独Gradle插件:
kotlin platform common
kotlin platform js
、以及
kotlin platform jvm

,现在使用一个
kotlin multiplatform
插件将其统一

然而,在我的项目中,我有多个多平台项目,它们之间有一些依赖关系。使用旧的多平台配置,每个不同的平台都是一个单独的模块,需要在项目之间添加依赖项,将每个平台特定模块中的项目引用添加到其他项目中的相应模块:例如,
project(“:some library:some library js”)
从另一个JS模块中向JS模块添加依赖项

在迁移到新的多平台配置时,我现在需要将依赖项从使用旧配置方法配置的项目添加到使用新的
kotlin多平台插件配置的项目


鉴于平台特定模块现在由新插件指定和管理,我该怎么做?

我不确定以下方法是否是推荐的方法,或者我忽略了任何潜在的问题,但我的项目已经编译,所有测试都通过了

在Gradle中,可以向特定项目配置添加依赖项:

dependencies {
    implementation project(path: ':some-library', configuration: 'configName')
}
通过反复试验,我发现为每个平台模块类型指定以下配置依赖项是可行的:

  • 通用:
    配置:“存档”
    。否则,Gradle配置将失败,因为找不到代码依赖项
如果不满足以下条件,编译将失败:

  • jvm:
    配置:“jvmDefault”
  • js:
    配置:“jsDefault”
例如,对于问题中指定的JS模块:

dependencies {
    implementation project(path: ':some-library', configuration: 'jsDefault')
}

基本上,您不需要在涉及Kotlin Muiltiplatform项目的项目到项目依赖项中指定平台。Kotlin插件以Gradle自动选择适当目标工件的方式设置依赖项解析

因此,例如,在Kotlin/JVM单目标项目中,您可以在多平台项目上使用
项目(“…”
依赖项:

dependencies {
    implementation(project(":multiplatform-library")
}
如果
:multiplatform library
有一个JVM目标,则此依赖关系将解析为JVM目标的工件。否则,您将在列出候选配置时遇到依赖项解析失败

Kotlin参考文件对此进行了描述,但也适用于单平台项目:

项目(“…”)
对另一个多平台项目的依赖关系将自动解析为适当的目标。在源集的依赖项中指定单个
项目(“…”)
依赖项就足够了,并且包含源集的编译将接收该项目的相应平台特定工件,前提是它具有兼容的目标


如果您没有遇到这种情况,请发布特定的依赖项解决故障日志,或在。

上提交问题,当您说“Kotlin插件”时,您的意思是
Kotlin多平台
?我的问题是,如果从使用旧平台特定插件(例如,
kotlin platform js
)的项目中,您需要引用使用
kotlin multiplatform
设置的项目,该怎么办?我明白,一旦对所有项目全面升级到
kotlin multiplatform
,您提到的一切都会起作用(事实上,这就是我现在所拥有的)。但是,在这两者之间,我希望能够编译以查看是否一切正常,因为不必一次升级所有项目。
kotlin multiplatform
插件与单平台插件共享大量代码,是的,这种依赖解析设置应该对这些插件有效,也是。只是通过检查旧版本来尝试这个。因“无法在以下项目变体中选择:多平台库”而失败。。。后面是一长串的所有变体(jsCompile、jsCompileOnly、jsDefault、jsRuntime、jsRuntimeElements等)。手动指定配置变量确实有效。非常感谢您的评论。我试图让我的Android库依赖于我的另一个多平台项目的jvm工件大约一周。“jvmDefault”成功了!我认为common应该是“default”而不是“archives”,这也使得gradle可以工作,但intellij不喜欢这样。我有一个基本库和一个使用它的应用程序。应用程序的公用文件夹在intellij中看不到库公用文件夹中的类。我想是因为