Gradleの使い方

ページ編集

GradleでKotlinプロジェクトをビルドするには、プロジェクトにKotlin Gradleプラグインを適用して依存関係を設定する必要があります。

プラグインとバージョン

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`依存を持つモジュールに依存する他のモジュールのコンパイル時には公開されません。

モジュールの内部ロジックに必要な依存関係に使用します。

モジュールが公開されていないエンドポイント アプリケーションである場合、api 依存関係の代わりに 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-commonkotlin-test-annotations-commonの依存関係を追加してください。
  • For JVM targets, use kotlin-test-junit or kotlin-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-corektor-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.enabledfalse に設定(-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プロジェクトでのタスクの名前は、ビルド バリアント名を含み、compileDebugKotlincompileReleaseUnitTestKotlin などのように compile<BuildVariant>Kotlin パターンに従います。

    JavaScriptをターゲットにする場合、タスクはそれぞれ compileKotlinJscompileTestKotlinJs、カスタム ソース セット用は 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特有の属性

    “v5”

    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
    outputFileDestination *.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 に再インポートします

  • コメントを残す

    メールアドレスが公開されることはありません。