我有多项目Gradle构建,其中包含用Kotlin编写的所有代码。它有两个项目:普通和客户。子项目位于中间文件夹中,例如“demo”。所以文件夹结构是:
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
UPD:问题在于文件夹结构(或者可能是我声明依赖关系错误...) - 如果我删除了中间文件夹演示,则每个人都可以。
答案 0 :(得分:2)
好的,问题出在gradle.settings中错误的子项目中。应该是
NSBitmapImageFileType
而不是
include 'demo:common'
include 'demo:client'
然后是依赖项include 'demo/common'
include 'demo/client'
。
答案 1 :(得分:1)
检查您是否在根settings.gradle
中包含了这两个项目。
使用最少的工作设置检查this 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 /主/科特林/通过的/ 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())
}