Неразрешенная ссылка функции расширения Котлина в сборке Gradle

У меня есть несколько проектов Gradle build со всем кодом, написанным в Котлине. В нем есть два проекта: общий и клиентский. Подпроекты находятся в промежуточной папке, например «demo». Таким образом, структура папок:

project demo client build.gradle common build.gradle build.gradle gradle.properties settings.gradle 

Настройки.gradle:

 rootProject.name = 'demo' include 'demo/client' include 'demo/common' 

Клиент зависит от общего проекта compile project(":demo/common") . И в общем проекте есть функция расширения:

 fun <T> List<Future<T>>.getAll(): Long { var count = 0L this.forEach { it.get() count++ } return count } 

Если я попытаюсь использовать его в проекте клиента, я получаю Unresolved reference: getAll exception во время компиляции. Использование:

 ... import org.sandbox.imdg.hazelcast.common.utils.getAll class CassLoader { fun loadCalcData(): Long { ... val futures: List<Future<CalcData>> = items.map { map.putAsync(it.getKey(), it) } return futures.getAll() } } 

В то же время все компилируется отлично, если я положил объявление getAll в проект клиента. Я уверен, что импорт функции верен, но в то же время у меня был небольшой опыт работы с Gradle, поэтому я мог бы что-то упустить.

  • Сборка: gradlew clean build
  • Котлин: 1.0.2
  • Gradle: 2,9

UPD: проблема в структуре папок (или, может быть, я объявляю зависимости неверными …) – если я удаляю промежуточную демоверсию промежуточных папок, все в порядке.

Проверьте, включены ли оба проекта в root settings.gradle .

Проверьте этот Gist с минимальной рабочей настройкой.

settings.gradle :

 rootProject.name = 'demo' include 'client' include 'common' 

build.gradle :

 buildscript { repositories { jcenter() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } subprojects { apply plugin: 'kotlin' repositories { jcenter() maven { url "http://repository.jetbrains.com/all" } } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" } } 

общие / SRC / Основной / Kotlin / с / DEV / madhead / демо / общее / Funktions.kt

 package by.dev.madhead.demo.common fun String.revert(): String { return this.reversed() } 

клиент / build.gradle

 dependencies { compile project(':common') } 

клиент / SRC / главная / Котлин / по / DEV / madhead / демо / клиент / App.kt

 package by.dev.madhead.demo.client import by.dev.madhead.demo.common.revert fun main(args: Array<String>) { println("Hello".revert()) } 

Хорошо, проблема была в неправильном подпроекте, включении в gradle.settings. Должно быть

 include 'demo:common' include 'demo:client' 

вместо

 include 'demo/common' include 'demo/client' 

а затем для compile project(":demo:common") зависимостей compile project(":demo:common") .

Intereting Posts
kotlin, используя тип генериков класса данных Gradle 3.0.0-alpha1 не совместим с плагином kotlin-android 1.1.2-3? Kotlin не может найти компонент Dagger при построении с вариантом сборки версии Как я могу разбить String на массив в Kotlin? Какова цель Декларации объекта внутри герметичного класса в Котлине? RecyclerView не является прокручиваемым, а элементный клик не работает в recyclerview Получить запись с максимальным значением с карты в Котлин Ошибка ClassNotFoundException для проекта Kotlin (не для Android) на Android Studio Ошибка: выполнение выполнено для задачи ': app: compileDebugKotlin'. > Ошибка компиляции. Подробнее см. Журнал Когда можно опустить возвращаемый тип в Котлин Как реализовать ленивый адаптер recyclerView для загрузки, например realm recyclerView, используя kotlin Kotlin lambdas и тип вывода Может ли поле быть перенесено в не нулевую версию? FragmentTransaction hide / show иногда не работает Kotlin: "val someVar = if (xx) 1 else 1.0", почему someVar является "Any"?