如果我们想用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)下才有意义或有效。
答案 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")
}
同时在“客户端”和“服务器”端。以同样的方式。