Можно ли использовать в Котлине несколько общих библиотек?

Я попытался собрать проект в gradle с 3 модулями, где:
1) module1 - общий модуль с expect классами
пустые зависимости build.gradle
2) module2 - общий модуль с expect классами и с зависимостью от модуля 1:
build.gradle зависимости: compile project(':module1')
2) module3 - платформенный модуль jvm
зависимости build.gradle: expectedBy project(':module2')

Когда я пытаюсь скомпилировать проект, на этапе компиляции module3 появляются ошибки, что классы из module2 не могут найти классы из module1.

Kotlin 1.2.30
Gradle 4.6
Java 1.8_161

Можно ли использовать несколько общих модулей вместе в одном проекте?
А возможно ли иметь expect классов в каждом общем модуле?


person kurt    schedule 10.03.2018    source источник


Ответы (2)


В настоящее время использование общих объявлений из нескольких общих модулей не поддерживается, но планируется в будущих версиях.

В частности, после выпуска исправления для KT-22864 оно позволит вы должны добавить и module1, и module2 как expectedBy зависимости в module3. В настоящее время нет общедоступной предварительной сборки с исправлением, следите за обновлениями 1.2.40 EAP.


Если вы действительно хотите попробовать это раньше, вы можете использовать сборку разработчика (например, 1.2.40-dev-754 из репозитория https://dl.bintray.com/kotlin/kotlin-dev Maven).

Вы также можете попробовать сборку разработчика плагина IDE (из здесь), чтобы интегрировать среду разработки и правильно проанализировать несколько expectedBy зависимостей (1.2.30 может импортировать только одну такую ​​зависимость).

person hotkey    schedule 10.03.2018
comment
У меня аналогичная проблема, учитывая module1, у которых есть классы, которые должны использоваться только в тестах, я добавляю зависимость от них как testCompile в module2, а в module3 у меня есть платформа JVM, и независимо от того, как я объявляю зависимости, module3 не видит классы из module1 или они не компилируются, есть ли руководство, как реализовать этот конкретный вариант использования? - person Neonailol; 15.06.2018

Для этого необходимо иметь более одного expectedBy объявления, что на данный момент запрещено. Но, как говорят в kotlin slack, скоро это будет возможно.

Итак, на данный момент необходимо перейти на версию kotlin 1.2.40-dev-754, и тогда можно будет добавить второй expectedBy в зависимости в build.gradle в module3:
expectedBy project(':module1')
expectedBy project(':module2')

person kurt    schedule 10.03.2018