KotlinのgenerateStubs
とは何ですか? _build.gradle
_での私の構成は次のとおりです。
私はここで公開文書でそれを見つけることができません: http://kotlinlang.org/docs/reference/kapt.html
_kapt {
generateStubs = true
}
_
プロジェクトでJava
とKotlin(1.2)
を使用している場合、追加する必要がありますか?
[〜#〜] edit [〜#〜]:
プロジェクトでJavaとKotlin(1.2)を使用している場合、追加する必要があります
No、バージョン1.0.4では、注釈処理APIの新しい実験的実装が導入されています。 build.gradle
でこのgenerateStubs
を設定する必要はありません。
有効にする場合は、build.gradle
に次を追加します。
apply plugin: 'kotlin-kapt'
build.gradle
からgenerateStubs
configも削除する必要があります
しかし、generateStubs
の詳細についての質問として、古い投稿はそのままにします。
使用:
generatestubs = true
でkapt
を使用すると、dagger 2やdbflowなどのライブラリを使用するために、これにより、コンパイラがJavaとKotlinの間のinteroperabilityに必要なスタブクラスを生成できます。。generateStubs = true
が有効になっていない限り、「bootstrap
」(javac
に渡されるカスタムアノテーションプロセッサは、アノテーションデータをロードし、他のアノテーションプロセッサを呼び出します。)Java生成されたソースを参照するにはコードが必要です。 from
注:生成されたコードは、常にJava
ではなくKotlin
にあります。
すべての宣言を解決する必要があるため、スタブの生成には比較的多くの作業が必要です。また、戻り値の型を知るには、式(=
記号の後の関数またはプロパティ初期化子)の分析が必要な場合があります。したがって、kapt
でスタブを使用すると、ビルドが多少遅くなります。そのため、スタブはデフォルトでオフになっています。これらを有効にするには、build.gradle
ファイルに以下を書き込む必要があります。
kapt {
generateStubs = true
}
この仕組み:
コンパイラが生成した中間クラスであるスタブは、「生成された」ソースをKotlinから参照できるようにします。そうしないと、コンパイラは欠落しているソースを参照できません。
生成されたソースは"build/generated/source/kapt/main"
で作成されます。これは「build
」の下にあり、通常IntelliJのプロジェクトソースから除外され、このソースルートはビルドスクリプト自体でマークされます。
sourceSets {
main.Java.srcDirs += [file("$buildDir/generated/source/kapt/main")]
}
例:
Kotlin(1.1.50)注釈プロセッサを使用したDagger2-exampleは、Gradleビルドをサポートします