繁体   English   中英

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

[英]Is it possible to create a kotlin multiplatform project referencing the correct target of a common module?

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

common
android
  android1
  android2
backend
  api1
  api2

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

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

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

例如,如果我们想在其他项目中使用 common 模块作为依赖项,我们需要使用以下内容:

dependencies {
  implementation project(':common')
}

但是,是否可以只使用公共模块的正确部分? 像这样的东西(对于 android 1 和 2)?

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

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

我们可以使用一种称为消除目标歧义的策略来实现这一目标。

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")
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM