Search code examples
kotlinkotlin-multiplatform

Does It possible to use multiple common libraries in Kotlin?


I have tried to build project in gradle with 3 modules, where:
1) module1 - common module with expect classes
empty build.gradle dependencies
2) module2 - common module with expect classes and with dependency from module 1:
build.gradle dependencies: compile project(':module1')
2) module3 - jvm platform module
build.gradle dependencies: expectedBy project(':module2')

When I try to compile a project, it appears errors in compilation stage of module3, that classes from module2 couldn't find classes from module1.

Kotlin 1.2.30
Gradle 4.6
Java 1.8_161

Does It possible to use multiple common modules together in one project?
And does it possible to have expect classes in each common module?


Solution

  • Currently, using common declarations from multiple common modules is not supported, but it is planned for future versions.

    In particular, once the fix for KT-22864 is released, it will allow you to add both module1 and module2 as expectedBy dependencies to module3. There's currently no public preview build with the fix, please stay tuned for 1.2.40 EAPs.


    If you really want to try it early, you can use a dev build (e.g. 1.2.40-dev-754 from the https://dl.bintray.com/kotlin/kotlin-dev Maven repository).

    You can also try a dev build of the IDE plugin (from here) to make the IDE import and analyze multiple expectedBy dependencies properly (1.2.30 can only import one such dependency).