以前,使用Gradle构建多平台项目依赖于针对平台的单独的Gradle插件:kotlin-platform-common、kotlin-platform-js和kotlin-platform-jvm。
从Kotlin 1.3开始,现在统一使用一个kotlin-multiplatform插件。当前文档指定如何使用此方法设置多平台项目。。
但是,在我的项目中,我有多个多平台项目,它们之间有一些依赖关系。对于旧的多平台配置,每个不同的平台都是一个单独的模块,在项目之间添加依赖关系需要在每个特定于平台的模块中添加项目引用到另一个项目中的相应模块:例如,project(':some-library:some-library-js')从另一个JS模块中向JS模块添加一个依赖项。
在迁移到新的多平台配置时,我现在需要从使用旧配置方法配置的项目中向使用新kotlin-multiplatform插件配置的项目添加依赖项。
考虑到特定于平台的模块现在由新插件指定和管理,我该如何做呢?
发布于 2019-03-21 12:51:01
我不确定下面的方法是否是推荐的方法,或者我忽略了任何潜在的问题,但是我的项目编译和所有测试都通过了。
在Gradle中,可以将依赖项添加到特定的项目配置中:
dependencies {
implementation project(path: ':some-library', configuration: 'configName')
}通过尝试和错误,我发现在每个平台模块类型中指定以下配置依赖项是可行的:
configuration: 'archives'.否则,由于找不到代码依赖项,Gradle配置将失败。如果没有以下内容,编译就会失败:
configuration: 'jvmDefault'configuration: 'jsDefault'例如,对于问题中指定的JS模块:
dependencies {
implementation project(path: ':some-library', configuration: 'jsDefault')
}发布于 2019-03-21 13:25:36
基本上,您不需要在涉及Kotlin Muiltiplatform项目的项目到项目依赖项中指定平台。Kotlin插件以Gradle将自动选择适当目标工件的方式设置依赖解决方案。
因此,例如,在Kotlin/JVM单目标项目中,您只需在多平台项目上使用project("...")依赖:
dependencies {
implementation(project(":multiplatform-library")
}如果:multiplatform-library有一个JVM目标,这个依赖将被解析为JVM目标的工件。否则,在列出候选配置时,您将遇到依赖解决失败。
这在Kotlin引用( 使用分级添加依赖项构建多平台项目 )中有描述,但也适用于单一平台项目:
<...> --另一个多平台项目上的
project('...')依赖项被自动解析为适当的目标。只要在源集的依赖项中指定一个project('...')依赖项就足够了,而包含源集的编译将收到该项目的相应平台特定工件,因为它有一个兼容的目标。
如果您没有遇到这种情况,请张贴特定的依赖解决故障日志,或者在https://kotl.in/issue上提交一个问题。
https://stackoverflow.com/questions/55280650
复制相似问题