是否可以创建一个引用公共模块正确目标的kotlin多平台项目?

时间:2019-02-03 14:37:31

标签: android api kotlin build.gradle kotlin-multiplatform

如果我们想用Kotlin构建一个多平台项目,并且我们有一个像这样的结构:

common
android
  android1
  android2
backend
  api1
  api2

common模块中,我们有3个目标/预设:

  • jvm(具有所有基于jvm的项目的通用代码)
  • jvmAndroid(所有jvm android项目都有通用代码,取决于jvm)
  • jvmApi(所有jvm api项目都有通用代码,取决于jvm)

我们如何正确配置build.gradle文件以仅取决于正确的预设/目标?

例如,如果我们想在其他项目中使用通用模块作为依赖项,我们需要使用类似的东西:

dependencies {
  implementation project(':common')
}

但是,可以仅使用公共模块的正确部分吗?像这样(对于Android 1和2)?

dependencies {
  implementation project(':common:jvmAndroid')
}

否则,当我们使用implementation project(':common')时,它将获得所有jvm预设/目标,但是某些代码仅在正确的平台(在这种情况下为android或api)下才有意义或有效。

1 个答案:

答案 0 :(得分:1)

我们可以使用一种区分目标的策略来实现此目标。

https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#disambiguating-targets

我们需要做类似的事情:

val commonAttribute = Attribute.of("com.example", String::class.java)

jvm {
    attributes.attribute(commonAttribute, "nameOfYourTarget")
}

同时在“客户端”和“服务器”端。以同样的方式。