Gradle构建中未解决的Kotlin扩展函数的引用

我有用Kotlin编写的所有代码构建多个项目Gradle。 有两个项目:普通和客户端。 子项目在中间文件夹,说“演示”。 所以文件夹结构是:

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

settings.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异常。 用法:

 ... 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
  • Kotlin:1.0.2
  • Gradle:2.9

UPD:问题是在文件夹结构(或者可能是我宣布依赖错误…) – 如果我删除中间文件夹演示everytning是好的。

检查是否在根settings.gradle包含了两个项目。

用最少的工作设置检查这个要点 。

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 /主/科特林/通过的/ 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")