ページ編集
GradleでKotlinプロジェクトをビルドするには、プロジェクトにKotlin Gradleプラグインを適用して依存関係を設定する必要があります。
- プラグインとバージョン
- マルチプラットフォーム
- JVM
- Kotlin および Java ソース
- Targeting JavaScript
- Kotlin と Java ソース
- Targeting Android
- 依存関係の設定
- Dependency types
- Dependency on the standard library
- Set dependencies on test libraries
- Set a dependency on a kotlinx library
- Set dependencies at the top level
- アノテーション処理
- インクリメンタルコンプレーション
- Gradle ビルドキャッシュサポート
- Gradle configuration cache support
- コンパイラーオプション
- Attributes common for JVM, JS, JS DCE
- JVMとJSで共通の属性
- 属性のリスト JVM
- JS特有の属性
- Generating documentation
- OSGi
- Using Gradle Kotlin DSL
プラグインとバージョン
GradleプラグインDSLを使用してKotlin Gradleプラグインを適用します。
KotlinGradleプラグイン1.4.30はGradle5.4以降で機能します。 kotlin-multiplatform
プラグインは Gradle 6.0 以降が必要です。
plugins { id 'org.jetbrains.kotlin.<...>' version '1.4.30'}
plugins { kotlin("<...>") version "1.4.30"}
プレースホルダー <...>
は次のセクションで見つかるプラグイン名のひとつに置き換える必要があります。
マルチプラットフォーム
マルチプラットフォーム プロジェクトと呼ばれる、複数のプラットフォームを対象とするプロジェクトでは、kotlin-multiplatform
プラグインが必要です。 プラグインについての詳細はこちらをご覧ください。
The
kotlin-multiplatform
plugin works with Gradle 6.0 or later.
plugins { id 'org.jetbrains.kotlin.multiplatform' version '1.4.30'}
plugins { kotlin("multiplatform") version "1.4.30"}
JVM
ターゲット
JVMをターゲットするには、 Kotlin JVMプラグインを適用してください。
plugins { id "org.jetbrains.kotlin.jvm" version "1.4.30"}
plugins { kotlin("jvm") version "1.4.30"}
このブロックでは version
はリテラルでなければならず、別のビルドスクリプトから適用することはできません。
あるいは、古いapply plugin
アプローチを使用することもできます。
apply plugin: 'kotlin'
Gradle Kotlin DSL で apply
を使用して Kotlin プラグインを適用することはお勧めしません – 理由はこちら。
Kotlin および Java ソース
KotlinソースはJavaソースとともに同じフォルダに格納することも、異なるフォルダに置くことも可能です。 デフォルトでは、異なるフォルダーを使用します。
project - src - main (root) - kotlin - java
デフォルトでない場合は、対応する sourceSets
プロパティを更新する必要があります:
sourceSets { main.kotlin.srcDirs += 'src/main/myKotlin' main.java.srcDirs += 'src/main/myJava'}
sourceSets.main { java.srcDirs("src/main/myJava", "src/main/myKotlin")}
Targeting JavaScript
JavaScriptのみを対象とする場合、kotlin-js
プラグインを使用します。 詳しくはこちら
plugins { id 'org.jetbrains.kotlin.js' version '1.4.30'}
plugins { kotlin("js") version "1.4.30"}
Kotlin と Java ソース
このプラグインは Kotlin ファイルに対してのみ有効ですので、Kotlin と Java ファイルは別々に管理することをお勧めします (Java ファイルがプロジェクト内にある場合のみ)。 別々に保管しない場合は、sourceSets
ブロックでソース フォルダーを指定します:
kotlin { sourceSets { main.kotlin.srcDirs += 'src/main/myKotlin' }}
kotlin { sourceSets.apply { kotlin.srcDir("src/main/myKotlin") }}
Targeting Android
Android アプリケーションを作成する場合は、Android Studio を使用するようお勧めします。 Android Gradle プラグインの使用方法について説明します。
依存関係の設定
ライブラリへの依存関係を追加するには、ソースセット DSL の dependencies
ブロックで必要な型(たとえば implementation
)の依存関係を設定します。
kotlin { sourceSets { commonMain { dependencies { implementation 'com.example:my-library:1.0' } } }}
kotlin { sourceSets { val commonMain by getting { dependencies { implementation("com.example:my-library:1.0") } } }}
代わりに、トップレベルで依存性を設定することができます。
Dependency types
要件に基づいて依存関係のタイプを選択します。
タイプ | 説明 | |
---|---|---|
api |
コンパイル時と実行時に使用される、ライブラリ消費者に輸出されるものです。 | 依存関係からの任意の型が現在のモジュールのパブリック API で使用される場合、api 依存関係を使用します。 |
implementation |
コンパイル時および現在のモジュールの実行時に使用されますが、`implementation`依存を持つモジュールに依存する他のモジュールのコンパイル時には公開されません。 |
モジュールの内部ロジックに必要な依存関係に使用します。 モジュールが公開されていないエンドポイント アプリケーションである場合、 |
compileOnly |
現在のモジュールのコンパイルに使用され、実行時および他のモジュールのコンパイル中には使用できません。 | |
runtimeOnly |
実行時に利用可能だが、どのモジュールのコンパイル時にも見えない。 |
Dependency on the standard library
各ソースセットの標準ライブラリ (stdlib
) に対する依存性が自動的に追加されています。 標準ライブラリのバージョンはKotlin Gradleプラグインのバージョンと同じです。
プラットフォーム固有のソースセットでは、対応するプラットフォーム固有のバリエーションライブラリが使用され、それ以外では共通の標準ライブラリが追加されます。 Kotlin Gradle プラグインは、Gradle ビルド スクリプトの kotlinOptions.jvmTarget
コンパイラー オプションに応じて適切な JVM 標準ライブラリを選択します。
標準ライブラリ依存を明示的に宣言した場合 (たとえば、異なるバージョンが必要な場合)、Kotlin Gradle プラグインはそれを上書きしたり 2 番目の標準ライブラリを追加したりはしません。
標準ライブラリがまったく必要ない場合は、gradle.properties
:
kotlin.stdlib.default.dependency=false
Set dependencies on test libraries
The kotlin.test
API は異なる Kotlin プロジェクトのテスト用に利用可能です。
テストライブラリに対応する依存関係を追加します:
commonTest
については、kotlin-test-common
とkotlin-test-annotations-common
の依存関係を追加してください。- For JVM targets, use
kotlin-test-junit
orkotlin-test-testng
for the corresponding asserter implementation and annotations mapping. - For Kotlin/JS targets, add
kotlin-test-js
as a test dependency.
Kotlin/Native target does not require additional test dependencies, and the kotlin.test
API implementation are built-in.For Korton/Targets, for the added additional testing dependency as an additional application.
Kotlin モジュールへの依存の略記法を使用できます。たとえば、kotlin(“test”) は “org.jetbrains.kotlin:kotlin-test” の略記法です。
Set a dependency on a kotlinx library
kotlinx ライブラリを使用し、プラットフォーム固有の依存関係が必要な場合、-jvm
や -js
などのサフィックスを持つライブラリのプラットフォーム固有の変種、たとえば kotlinx-coroutines-core-jvm
を使用することができます。 また、代わりにライブラリのベース アーティファクト名を使用することもできます – kotlinx-coroutines-core
.
kotlin { sourceSets { jvmMain { dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.4.2' } } }}
マルチプラットフォーム ライブラリを使用し共有コードへの依存が必要な場合、共有ソース セットに 1 回のみ依存関係を設定します。 kotlinx-coroutines-core
や ktor-client-core
などのライブラリ ベース アーティファクト名を使用します。
kotlin { sourceSets { commonMain { dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2' } } }}
Set dependencies at the top level
あるいは、パターン <sourceSetName><DependencyType>
に従う構成名でトップ レベルでの依存性を指定することが可能です。 これは、gradleApi()
、localGroovy()
、gradleTestKit()
など、ソースセット依存DSLで利用できない一部のGradle組み込み依存関係で役に立ちます。
dependencies { commonMainImplementation 'com.example:my-library:1.0'}
dependencies { "commonMainImplementation"("com.example:my-library:1.0")}
アノテーション処理
Kotlinはアノテーション処理ツール kapt
を介してアノテーション処理をサポートします。
インクリメンタルコンプレーション
Gradleプラグインは、インクリメンタル・コンパイルをサポートします。 インクリメンタル コンパイルは Kotlin/JVM および Kotlin/JS プロジェクトでサポートされており、Kotlin 1.1.1 からデフォルトで有効になっています。
-
kotlin.incremental=false
for Kotlin/JVM -
kotlin.incremental.js=false
for Kotlin/JS projects
As the command line parameters, use -Pkotlin.incremental=false
or -Pkotlin.incremental.js=false
.
この場合、パラメータは後続の各ビルドに追加されるべきで、インクリメンタル コンパイルを無効にしたビルドはインクリメンタル キャッシュを無効にすることに注意してください。
Gradle ビルドキャッシュサポート
Kotlinプラグインは、将来のビルドで再利用するためにビルド出力を保存するGradleビルドキャッシュをサポートします。
すべての Kotlinタスクのキャッシュを無効にするには、システムのプロパティフラグ kotlin.caching.enabled
を false
に設定(-Dkotlin.caching.enabled=false
引数を付けてビルドを実行)します。
kaptを使っているなら、Kapt注釈処理タスクがデフォルトではキャッシュしないことに留意してください。 しかし、手動でキャッシュを有効にすることができます。
Gradle configuration cache support
configuration cache は Gradle 6.5 およびそれ以降で experimental feature として提供されています。
Kotlin プラグインは、設定フェーズの結果を再利用してビルドプロセスを高速化する Gradle コンフィギュレーションキャッシュをサポートしています。
コンパイラーオプション
追加のコンパイルオプションを指定するには、Kotlin コンパイルタスクの kotlinOptions
プロパティを使用します。
JVMをターゲットにする場合、タスクは製品コード用に compileKotlin
、テストコード用に compileTestKotlin
と呼ばれます。 カスタム ソース セット用のタスクは、compile<Name>Kotlin
パターンに従って呼び出されます。
Androidプロジェクトでのタスクの名前は、ビルド バリアント名を含み、compileDebugKotlin
、compileReleaseUnitTestKotlin
などのように compile<BuildVariant>Kotlin
パターンに従います。
JavaScriptをターゲットにする場合、タスクはそれぞれ compileKotlinJs
、compileTestKotlinJs
、カスタム ソース セット用は compile<Name>KotlinJs
という名前です。
単一のタスクとして設定するには、その名前を使用してください。 例:
compileKotlin { kotlinOptions.suppressWarnings = true}//orcompileKotlin { kotlinOptions { suppressWarnings = true }}
Note that Gradle Kotlin DSL, you should get the task from the project’s tasks
first.
Use the types Kotlin2JsCompile
and KotlinCompileCommon
for the JS and Common targets, accordingly, to use the types Kotlin2JsCompile
and KotlinCompileCommon
for the common target.
また、プロジェクト内のすべての Kotlin コンパイル タスクを設定することも可能です:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { /*...*/ }}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach { kotlinOptions { /*...*/ }}
Gradleタスクのオプション一覧は、次のとおりです。
Attributes common for JVM, JS, JS DCE
名前 | 説明 | 取りうる値 | デフォルト値 |
---|---|---|---|
allWarningsAsErrors |
If there is any error reported an effort. warnings | false | |
suppressWarnings |
false | ||
verbose ロギング出力で詳細表示する |
false | ||
freeCompilerArgs |
追加のコンパイラ引数のリスト |
JVMとJSで共通の属性
属性のリスト JVM
名前 | 説明 | 取りうる値 | デフォルト値 |
---|---|---|---|
javaParameters |
Java1のメタデータ作成(1) | ||
メタデータ作成は、Java1.8 Reflection on method parameters | false | ||
jdkHome |
指定した場所からカスタム JDK にインクルードする。 クラスパスの代わりにデフォルトの JAVA_HOME | ||
jvmTarget |
Target version of generated JVM bytecode | “1.0”.6″, “1.8”, “9”, “10”, “11”, “12”, “13”, “14”, “15” | “1.6” |
noJdk |
Javaランタイムを自動的にクラスパスに含めない | false | |
noReflect |
コットンリフレクトを自動的にクラスパスに含めない classpath | true | |
noStdlib |
自動的に Kotlin/JVM stdlib と Kotlin reflection をクラスパスに含めない | true | |
useIR |
Use IR backend | false |
JS特有の属性
Name | Description | Possible values | Default value | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
friendModulesDisabled |
内部宣言エクスポートを無効にする | false | ||||||||||
main |
実行時に main 関数が呼ばれるかどうか |
“call” を定義する。 “noCall” | “call” | |||||||||
metaInfo |
.NETを生成します。メタデータを含む .meta.js と .kjsm ファイルを生成します。 ライブラリの作成に使用します | true | ||||||||||
moduleKind |
コンパイラが生成するJSモジュールの種類 | “umd”, “commonjs”, “amd”, “plain” | “umd” | |||||||||
noStdlib |
コンパイル依存にデフォルトの Kotlin/JS stdlib を自動的に含めない | true | ||||||||||
outputFile Destination *.JS |
“<buildDir>/js/packages/<project.name>/kotlin/<project.name>.js ファイルを生成します。js” | |||||||||||
sourceMap |
ソースマップの生成 | true | ||||||||||
sourceMapEmbedSources |
ソースファイルをソースマップに埋め込み | “never”, “always”, “inlining” | ||||||||||
sourceMapPrefix |
ソースマップのパスに指定した接頭語を追加する | |||||||||||
target |
特定の ECMA バージョン用のJSファイルを生成する | “v5” | ||||||||||
typedArrays |
Translate primitive arrays to JS typed arrays | true |
Generating documentation
Kotlin プロジェクト用のドキュメントは生成することです。 Dokkaを使用します。設定方法についてはDokkaのREADMEを参照してください。 Dokka は言語が混在するプロジェクトをサポートし、標準の JavaDoc を含む複数のフォーマットで出力を生成できます。
OSGi
OSGi サポートについては Kotlin OSGi ページを参照してください。
Using Gradle Kotlin DSL
Gradle Kotlin DSL を使用して、 plugins { ... }
ブロックにより Kotlin プラグインを適用します。 代わりにapply { plugin(...) }
で適用すると、Gradle Kotlin DSLで生成された拡張機能への未解決の参照が発生する可能性があります。 これを解決するには、誤った使用をコメントアウトして Gradle タスク kotlinDslAccessorsSnapshot
を実行し、使用をコメントアウトして戻してビルドを再実行するか、プロジェクトを IDE に再インポートします
。