web-dev-qa-db-ja.com

KotlinのgenerateStubs設定とは何ですか?

KotlinのgenerateStubsとは何ですか? _build.gradle_での私の構成は次のとおりです。

私はここで公開文書でそれを見つけることができません: http://kotlinlang.org/docs/reference/kapt.html

_kapt {
  generateStubs = true
}
_

プロジェクトでJavaKotlin(1.2)を使用している場合、追加する必要がありますか?

19
kimkevin

[〜#〜] 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 = truekaptを使用すると、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ビルドをサポートします

20
Dipali s.