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")
。