Можно ли создать мультиплатформенный проект kotlin со ссылкой на правильную цель общего модуля? - PullRequest
0 голосов
/ 03 февраля 2019

Если мы хотим построить мультиплатформенный проект с Kotlin, и у нас есть такая структура:

common
android
  android1
  android2
backend
  api1
  api2

, где в модуле common у нас есть 3 цели / пресета:

  • jvm (с общим кодом для всех проектов на основе jvm)
  • jvmAndroid (с общим кодом для всех проектов jvm android, зависит от jvm)
  • jvmApi(общий код для всех проектов jvm api зависит от jvm)

Как правильно настроить файлы build.gradle s, чтобы они зависели только от правильной предустановки / цели?

Например, если мы хотим использовать общий модуль в качестве зависимости в других наших проектах, нам нужно использовать что-то вроде:

dependencies {
  implementation project(':common')
}

Но возможно ли использовать только правильную часть общего модуля?Примерно так (для android 1 и 2)?

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

В противном случае, когда мы используем implementation project(':common'), это получит все пресеты / цели jvm, но некоторый код будет иметь смысл или будет работать только на правильной платформе (вэто чехол андроид или api).

1 Ответ

0 голосов
/ 09 февраля 2019

Мы можем использовать стратегию под названием устранение неоднозначности целей для достижения этой цели.

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

Оба всторона клиента и сервера.Точно так же.

...