私はKotlinで書かれたすべてのコードを持つマルチプロジェクトのGradleビルドを持っています。それには共通プロジェクトとクライアントの2つのプロジェクトがあります。サブプロジェクトは中間フォルダにあります(例えば、 "demo")。だから、フォルダ構造は次のとおりです。GradleビルドでのKotlin拡張関数の未解決の参照
project
demo
client
build.gradle
common
build.gradle
build.gradle
gradle.properties
settings.gradle
settings.gradle:一般的なプロジェクトcompile project(":demo/common")
上
rootProject.name = 'demo'
include 'demo/client'
include 'demo/common'
クライアントdependes。そして、拡張機能は、一般的なプロジェクトであり:
fun <T> List<Future<T>>.getAll(): Long {
var count = 0L
this.forEach {
it.get()
count++
}
return count
}
私は、クライアントのプロジェクトでそれを使用しようとすると、私はコンパイル時にUnresolved reference: getAll
例外を取得します。用法:私はクライアントプロジェクトで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()
}
}
同じ時間すべてでは罰金コンパイル。私は関数のインポートが正しいと確信していますが、同時に私はGradleで少し経験があったので、何かが間に合わないかもしれません。
- ビルド:
gradlew clean build
- Kotlin:1.0.2
- のGradle:2.9
UPD:問題はフォルダ構造である(または私は間違った依存関係を宣言してるかもしれ.. 。) - 中間フォルダのデモを削除しても、全部OKです。
まだ成功していません。拡張子がクライアントのサブプロジェクトにある場合はすべてコンパイルされ、クライアントのサブプロジェクトに移動すると分割されます。両方のサブプロジェクトはsettings.gradleに含まれています。アップデート:あなたの設定はすべて問題ありません。差異があるかどうか確認してください。 – sedovav
問題はプロジェクトの構造にあります。プロジェクトには中間フォルダ(「デモ」)があり、そこには共通フォルダとクライアントフォルダがあります。その事実を反映するために質問を更新しました。 – sedovav