Referencia no resuelta de una function de extensión de Kotlin en la construcción de Gradle

Tengo un proyecto de Gradle con todo el código escrito en Kotlin. Hay dos proyectos en él: común y cliente. Los subproyectos se encuentran en la carpeta intermedia, digamos "demo". Entonces la estructura de la carpeta es:

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

The settings.gradle:

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

El cliente depende del proyecto de compile project(":demo/common") común compile project(":demo/common") . Y hay una function de extensión en el proyecto común:

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

Si trato de usarlo en el proyecto del cliente obtengo una Unresolved reference: getAll exception en el momento de la compilation. El uso:

 ... 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() } } 

Al mismo time todo comstack bien si pongo la statement getAll en el proyecto del cliente. Estoy bastante seguro de que la import de la function es correcta, pero al mismo time tuve una pequeña experiencia con Gradle y podría perder algo.

  • Construir: gradlew clean build
  • Kotlin: 1.0.2
  • Gradle: 2.9

UPD: El problema está en la estructura de la carpeta (o puedo estar declarando que las dependencies están equivocadas …) – si elimino la demo de la carpeta intermedia todo está bien.

    Compruebe si incluyó ambos proyectos en la settings.gradle .

    Comtesting este Gist con una configuration mínima de trabajo.

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

    common / src / main / kotlin / por / dev / madhead / demo / common / Funktions.kt

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

    cliente / build.gradle

     dependencies { compile project(':common') } 

    client / src / main / kotlin / por / dev / madhead / demo / client / App.kt

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

    Ok, el problema estaba en el subproyecto incorrecto incluye en el gradle.settings. Debiera ser

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

    en lugar de

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

    y luego para el compile project(":demo:common") dependencia compile project(":demo:common") .