2016-05-27 5 views
2

私は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です。

答えて

1

[OK]を、問題間違ったサブプロジェクトに含まれていたのは、gradle.settingsに含まれていました。依存compile project(":demo:common")ため

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

代わりの

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

してからでなければなりません。

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に/メイン/ kotlin /によっては/ dev/madhead /デモ/共通/ Funktions .kt

package by.dev.madhead.demo.common 

fun String.revert(): String { 
    return this.reversed() 
} 

クライアント/ build.gradle

dependencies { 
    compile project(':common') 
} 

クライアント/ srcに/メイン/ kotlin /によっては/ 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()) 
} 
+0

まだ成功していません。拡張子がクライアントのサブプロジェクトにある場合はすべてコンパイルされ、クライアントのサブプロジェクトに移動すると分割されます。両方のサブプロジェクトはsettings.gradleに含まれています。アップデート:あなたの設定はすべて問題ありません。差異があるかどうか確認してください。 – sedovav

+0

問題はプロジェクトの構造にあります。プロジェクトには中間フォルダ(「デモ」)があり、そこには共通フォルダとクライアントフォルダがあります。その事実を反映するために質問を更新しました。 – sedovav

関連する問題