Skip to content

Gradleプロジェクトを構成する

GradleでKotlinプロジェクトをビルドするには、ビルドスクリプトファイルbuild.gradle(.kts)Kotlin Gradleプラグインを追加し、そこでプロジェクトの依存関係を構成する必要があります。

NOTE

ビルドスクリプトの内容について詳しく学ぶには、

ビルドスクリプトを探索するセクションをご覧ください。

プラグインを適用する

Kotlin Gradleプラグインを適用するには、GradleのプラグインDSLからplugins{}ブロックを使用します。

kotlin
plugins {
    // Replace `<...>` with the plugin name appropriate for your target environment
    kotlin("<...>") version "2.1.21"
    // For example, if your target environment is JVM:
    // kotlin("jvm") version "2.1.21"
}
groovy
plugins {
    // Replace `<...>` with the plugin name appropriate for your target environment
    id 'org.jetbrains.kotlin.<...>' version '2.1.21'
    // For example, if your target environment is JVM: 
    // id 'org.jetbrains.kotlin.jvm' version '2.1.21'
}

NOTE

Kotlin Gradleプラグイン (KGP) とKotlinは同じバージョン番号を共有しています。

プロジェクトを構成する際、Kotlin Gradleプラグイン (KGP) と利用可能なGradleバージョンの互換性を確認してください。次の表は、GradleとAndroid Gradleプラグイン (AGP) の最小および最大完全サポートバージョンです。

KGP versionGradle min and max versionsAGP min and max versions
2.1.207.6.3–8.12.17.3.1–8.7.2
2.1.0–2.1.107.6.3–8.10*7.3.1–8.7.2
2.0.20–2.0.216.8.3–8.8*7.1.3–8.5
2.0.06.8.3–8.57.1.3–8.3.1
1.9.20–1.9.256.8.3–8.1.14.2.2–8.1.0
1.9.0–1.9.106.8.3–7.6.04.2.2–7.4.0
1.8.20–1.8.226.8.3–7.6.04.1.3–7.4.0
1.8.0–1.8.116.8.3–7.3.34.1.3–7.2.1
1.7.20–1.7.226.7.1–7.1.13.6.4–7.0.4
1.7.0–1.7.106.7.1–7.0.23.4.3–7.0.2
1.6.20–1.6.216.1.1–7.0.23.4.3–7.0.2

DANGER

*Kotlin 2.0.20–2.0.21およびKotlin 2.1.0–2.1.10は、Gradle 8.6まで完全な互換性があります。

Gradleバージョン8.7–8.10もサポートされていますが、1つだけ例外があります。Kotlin Multiplatform Gradleプラグインを使用している場合、

JVMターゲットでwithJava()関数を呼び出すMultiplatformプロジェクトで非推奨警告が表示される場合があります。

詳細については、デフォルトで作成されるJavaソースセットをご覧ください。

最新リリースまでのGradleおよびAGPバージョンも使用できますが、その場合、非推奨警告が表示されたり、一部の新機能が動作しなかったりする可能性があることに注意してください。

たとえば、Kotlin Gradleプラグインとkotlin-multiplatformプラグイン 2.1.21 は、プロジェクトをコンパイルするために最低Gradleバージョン 7.6.3 を必要とします。

同様に、最大完全サポートバージョンは 8.12.1 です。これには非推奨のGradleメソッドやプロパティがなく、すべての現在のGradle機能をサポートしています。

プロジェクト内のKotlin Gradleプラグインデータ

デフォルトでは、Kotlin Gradleプラグインは、プロジェクト固有の永続データをプロジェクトのルートの.kotlinディレクトリに保存します。

DANGER

.kotlinディレクトリをバージョン管理にコミットしないでください。

たとえば、Gitを使用している場合は、.kotlinをプロジェクトの.gitignoreファイルに追加してください。

この動作を設定するために、プロジェクトのgradle.propertiesファイルに追加できるプロパティがあります。

Gradle propertyDescription
kotlin.project.persistent.dirプロジェクトレベルのデータが保存される場所を構成します。デフォルト: <project-root-directory>/.kotlin
kotlin.project.persistent.dir.gradle.disableWrite.gradleディレクトリへのKotlinデータの書き込みを無効にするかどうかを制御します (古いIDEAバージョンとの後方互換性のため)。デフォルト: false

JVMをターゲットにする

JVMをターゲットにするには、Kotlin JVMプラグインを適用します。

kotlin
plugins {
    kotlin("jvm") version "2.1.21"
}
groovy
plugins {
    id "org.jetbrains.kotlin.jvm" version "2.1.21"
}

このブロックのversionはリテラルである必要があり、別のビルドスクリプトから適用することはできません。

KotlinとJavaのソース

KotlinソースとJavaソースは同じディレクトリに保存することも、異なるディレクトリに配置することもできます。

デフォルトの慣習では、異なるディレクトリを使用します。

text
project
    - src
        - main (root)
            - kotlin
            - java

DANGER

.javaファイルをsrc/*/kotlinディレクトリに保存しないでください。.javaファイルはコンパイルされません。

代わりに、src/main/javaを使用できます。

デフォルトの慣習を使用しない場合は、対応するsourceSetsプロパティを更新する必要があります。

kotlin
sourceSets.main {
    java.srcDirs("src/main/myJava", "src/main/myKotlin")
}
groovy
sourceSets {
    main.kotlin.srcDirs += 'src/main/myKotlin'
    main.java.srcDirs += 'src/main/myJava'
}

関連するコンパイルタスクのJVMターゲット互換性を確認する

ビルドモジュールには、関連するコンパイルタスクが存在する場合があります。たとえば、次のとおりです。

  • compileKotlincompileJava
  • compileTestKotlincompileTestJava

NOTE

maintestソースセットのコンパイルタスクは関連していません。

これらの関連するタスクについては、Kotlin GradleプラグインがJVMターゲットの互換性をチェックします。kotlin拡張またはタスクのjvmTarget属性と、java拡張またはタスクのtargetCompatibilityの値が異なる場合、JVMターゲットの互換性がなくなります。たとえば、 compileKotlinタスクのjvmTarget=1.8と、 compileJavaタスクのtargetCompatibility=15 (または継承される値)です。

このチェックの動作をプロジェクト全体で構成するには、gradle.propertiesファイルのkotlin.jvm.target.validation.modeプロパティを次のように設定します。

  • error – プラグインがビルドを失敗させます。Gradle 8.0以降のプロジェクトのデフォルト値です。
  • warning – プラグインが警告メッセージを出力します。Gradle 8.0未満のプロジェクトのデフォルト値です。
  • ignore – プラグインがチェックをスキップし、メッセージを出力しません。

build.gradle(.kts)ファイルでタスクレベルで設定することもできます。

kotlin
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile>().configureEach {
    jvmTargetValidationMode.set(org.jetbrains.kotlin.gradle.dsl.jvm.JvmTargetValidationMode.WARNING)
}
groovy
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile.class).configureEach {
    jvmTargetValidationMode = org.jetbrains.kotlin.gradle.dsl.jvm.JvmTargetValidationMode.WARNING
}

JVMターゲットの非互換性を回避するには、ツールチェーンを構成するか、JVMバージョンを手動で調整します。

ターゲットが非互換の場合に何が問題になるか

KotlinとJavaのソースセットに対してJVMターゲットを手動で設定する方法は2つあります。

  • Javaツールチェーンを設定するという暗黙的な方法。
  • kotlin拡張またはタスクのjvmTarget属性と、java拡張またはタスクのtargetCompatibilityを明示的に設定する方法。

JVMターゲットの非互換性は、次の場合に発生します。

  • jvmTargettargetCompatibilityに異なる値を明示的に設定した場合。
  • デフォルト設定で、JDKが1.8と等しくない場合。

ビルドスクリプトにjvmTarget値に関する明示的な情報がなく、Kotlin JVMプラグインのみが存在するデフォルトのJVMターゲット構成を考えてみましょう。

kotlin
plugins {
    kotlin("jvm") version "2.1.21"
}
groovy
plugins {
    id "org.jetbrains.kotlin.jvm" version "2.1.21"
}

ビルドスクリプトにjvmTarget値に関する明示的な情報がない場合、そのデフォルト値はnullであり、コンパイラはそれをデフォルト値1.8に変換します。targetCompatibilityは、現在のGradleのJDKバージョン、つまりご自身のJDKバージョンと等しくなります(Javaツールチェーンアプローチを使用しない限り)。ご自身のJDKバージョンが17であると仮定すると、発行されるライブラリ成果物はJDK 17+と互換性があることを宣言します (org.gradle.jvm.version=17)。これは誤りです。この場合、バイトコードのバージョンが1.8であっても、このライブラリを追加するにはメインプロジェクトでJava 17を使用する必要があります。この問題を解決するには、ツールチェーンを構成します

Gradle Javaツールチェーンサポート

DANGER

Androidユーザーへの警告。Gradleツールチェーンサポートを使用するには、Android Gradleプラグイン (AGP) バージョン8.1.0-alpha09以降を使用してください。

Gradle Javaツールチェーンサポートは、AGP 7.4.0から利用可能です。

しかし、この問題のため、AGPはバージョン8.1.0-alpha09までtargetCompatibilityをツールチェーンのJDKと等しく設定しませんでした。

バージョン8.1.0-alpha09より前のバージョンを使用している場合は、compileOptionsを介してtargetCompatibilityを手動で構成する必要があります。

プレースホルダー<MAJOR_JDK_VERSION>を使用したいJDKバージョンに置き換えてください。

kotlin

android {

    compileOptions {

        sourceCompatibility = <MAJOR_JDK_VERSION>

        targetCompatibility = <MAJOR_JDK_VERSION>

    }

}

Gradle 6.7でJavaツールチェーンサポートが導入されました。 この機能を使用すると、次のことが可能です。

  • Gradleとは異なるJDKとJREを使用して、コンパイル、テスト、実行可能ファイルを実行できます。
  • まだリリースされていない言語バージョンでコードをコンパイルおよびテストできます。

ツールチェーンサポートにより、GradleはローカルJDKを自動検出でき、ビルドに必要な不足しているJDKをインストールできます。 これにより、Gradle自体は任意のJDKで実行でき、メジャーなJDKバージョンに依存するタスクではリモートビルドキャッシュ機能を再利用できます。

Kotlin Gradleプラグインは、Kotlin/JVMコンパイルタスクに対してJavaツールチェーンをサポートしています。JSおよびNativeタスクはツールチェーンを使用しません。 Kotlinコンパイラは常にGradleデーモンが実行されているJDK上で実行されます。 Javaツールチェーンは次のことを行います。

  • JVMターゲットで利用可能な-jdk-homeオプションを設定します。
  • ユーザーがjvmTargetオプションを明示的に設定しない場合、compilerOptions.jvmTargetをツールチェーンのJDKバージョンに設定します。 ユーザーがツールチェーンを構成しない場合、jvmTargetフィールドはデフォルト値を使用します。 JVMターゲットの互換性について詳しく学ぶ。
  • Javaコンパイル、テスト、javadocの各タスクで使用されるツールチェーンを設定します。
  • kaptワーカーが実行されるJDKに影響します。

ツールチェーンを設定するには、次のコードを使用します。プレースホルダー<MAJOR_JDK_VERSION>を使用したいJDKバージョンに置き換えてください。

kotlin
kotlin {
    jvmToolchain {
        languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>))
    }
    // Or shorter:
    jvmToolchain(<MAJOR_JDK_VERSION>)
    // For example:
    jvmToolchain(17)
}
groovy
kotlin {
    jvmToolchain {
        languageVersion = JavaLanguageVersion.of(<MAJOR_JDK_VERSION>)
    }
    // Or shorter:
    jvmToolchain(<MAJOR_JDK_VERSION>)
    // For example:
    jvmToolchain(17)
}

kotlin拡張を介してツールチェーンを設定すると、Javaコンパイルタスクのツールチェーンも更新されることに注意してください。

java拡張を介してツールチェーンを設定でき、Kotlinコンパイルタスクはそれを使用します。

kotlin
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>)) 
    }
}
groovy
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(<MAJOR_JDK_VERSION>)
    }
}

Gradle 8.0.2以降を使用している場合は、ツールチェーンリゾルバープラグインも追加する必要があります。 この種類のプラグインは、ツールチェーンをダウンロードするリポジトリを管理します。例として、settings.gradle(.kts)に以下のプラグインを追加してください。

kotlin
plugins {
    id("org.gradle.toolchains.foojay-resolver-convention") version("0.9.0")
}
groovy
plugins {
    id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0'
}

foojay-resolver-conventionのバージョンがGradleサイトのGradleバージョンと一致していることを確認してください。

NOTE

Gradleがどのツールチェーンを使用しているかを確認するには、ログレベル--infoでGradleビルドを実行し、出力で[KOTLIN] Kotlin compilation 'jdkHome' argument:から始まる文字列を探してください。

コロンの後の部分がツールチェーンのJDKバージョンになります。

特定のタスクに任意のJDK (ローカルJDKでも) を設定するには、Task DSLを使用します。

KotlinプラグインにおけるGradle JVMツールチェーンサポートについて詳しく学ぶ。

Task DSLでJDKバージョンを設定する

Task DSLを使用すると、UsesKotlinJavaToolchainインターフェースを実装するすべてのタスク(現時点ではKotlinCompileKaptTask)に対して任意のJDKバージョンを設定できます。 GradleにメジャーJDKバージョンを検索させる場合は、ビルドスクリプトの<MAJOR_JDK_VERSION>プレースホルダーを置き換えてください。

kotlin
val service = project.extensions.getByType<JavaToolchainService>()
val customLauncher = service.launcherFor {
    languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>))
}
project.tasks.withType<UsesKotlinJavaToolchain>().configureEach {
    kotlinJavaToolchain.toolchain.use(customLauncher)
}
groovy
JavaToolchainService service = project.getExtensions().getByType(JavaToolchainService.class)
Provider<JavaLauncher> customLauncher = service.launcherFor {
    it.languageVersion = JavaLanguageVersion.of(<MAJOR_JDK_VERSION>)
}
tasks.withType(UsesKotlinJavaToolchain::class).configureEach { task ->
    task.kotlinJavaToolchain.toolchain.use(customLauncher)
}

または、ローカルJDKへのパスを指定し、<LOCAL_JDK_VERSION>プレースホルダーをこのJDKバージョンに置き換えることもできます。

kotlin
tasks.withType<UsesKotlinJavaToolchain>().configureEach {
    kotlinJavaToolchain.jdk.use(
        "/path/to/local/jdk", // Put a path to your JDK
        JavaVersion.<LOCAL_JDK_VERSION> // For example, JavaVersion.17
    )
}

コンパイラタスクを関連付ける

コンパイルタスクを_関連付ける_ことで、一方のコンパイルが他方のコンパイル済み出力を利用するような関係を構築できます。コンパイルを関連付けることで、それらの間にinternalな可視性が確立されます。

Kotlinコンパイラは、デフォルトで各ターゲットのtestコンパイルとmainコンパイルなど、一部のコンパイルを関連付けます。 カスタムコンパイルのいずれかが別のコンパイルと関連していることを表現する必要がある場合は、独自の関連コンパイルを作成します。

IDEがソースセット間の可視性を推測するために関連コンパイルをサポートするようにするには、build.gradle(.kts)に以下のコードを追加します。

kotlin
val integrationTestCompilation = kotlin.target.compilations.create("integrationTest") {
    associateWith(kotlin.target.compilations.getByName("main"))
}
groovy
integrationTestCompilation {
    kotlin.target.compilations.create("integrationTest") {
        associateWith(kotlin.target.compilations.getByName("main"))
    }
}

ここで、integrationTestコンパイルはmainコンパイルと関連付けられており、機能テストからinternalオブジェクトにアクセスできるようになります。

Javaモジュール (JPMS) が有効な場合の構成

Kotlin GradleプラグインをJavaモジュールで動作させるには、ビルドスクリプトに以下の行を追加し、YOUR_MODULE_NAMEをJPMSモジュールへの参照(例: org.company.module)に置き換えてください。

kotlin
// Add the following three lines if you use a Gradle version less than 7.0
java {
    modularity.inferModulePath.set(true)
}

tasks.named("compileJava", JavaCompile::class.java) {
    options.compilerArgumentProviders.add(CommandLineArgumentProvider {
        // Provide compiled Kotlin classes to javac – needed for Java/Kotlin mixed sources to work
        listOf("--patch-module", "YOUR_MODULE_NAME=${sourceSets["main"].output.asPath}")
    })
}
groovy
// Add the following three lines if you use a Gradle version less than 7.0
java {
    modularity.inferModulePath = true
}

tasks.named("compileJava", JavaCompile.class) {
    options.compilerArgumentProviders.add(new CommandLineArgumentProvider() {
        @Override
        Iterable<String> asArguments() {
            // Provide compiled Kotlin classes to javac – needed for Java/Kotlin mixed sources to work
            return ["--patch-module", "YOUR_MODULE_NAME=${sourceSets["main"].output.asPath}"]
        }
    })
}

NOTE

module-info.javaは通常通りsrc/main/javaディレクトリに配置してください。

モジュールの場合、Kotlinファイルのパッケージ名はmodule-info.javaのパッケージ名と一致している必要があります。「package is empty or does not exist」というビルドエラーを回避するためです。

詳細については、以下をご覧ください。

その他の詳細

詳細については、以下をご覧ください。

コンパイルタスクでの成果物の使用を無効にする

まれなシナリオでは、循環依存関係エラーが原因でビルドが失敗することがあります。たとえば、複数のコンパイルがあり、1つのコンパイルが別のコンパイルのすべての内部宣言を参照でき、生成された成果物が両方のコンパイルタスクの出力に依存している場合です。

none
FAILURE: Build failed with an exception.

What went wrong:
Circular dependency between the following tasks:
:lib:compileKotlinJvm
--- :lib:jvmJar
     \--- :lib:compileKotlinJvm (*)
(*) - details omitted (listed previously)

この循環依存関係エラーを解決するために、GradleプロパティarchivesTaskOutputAsFriendModuleが追加されました。 このプロパティは、コンパイルタスクでの成果物入力の使用を制御し、結果としてタスク依存関係が作成されるかどうかを決定します。

デフォルトでは、このプロパティはタスクの依存関係を追跡するためにtrueに設定されています。循環依存関係エラーが発生した場合、コンパイルタスクでの成果物の使用を無効にしてタスクの依存関係を削除し、循環依存関係エラーを回避できます。

コンパイルタスクでの成果物の使用を無効にするには、gradle.propertiesファイルに次の行を追加します。

kotlin
kotlin.build.archivesTaskOutputAsFriendModule=false

Lazy Kotlin/JVMタスクの作成

Kotlin 1.8.20以降、Kotlin Gradleプラグインはすべてのタスクを登録し、ドライランではそれらを構成しません。

コンパイルタスクのdestinationDirectoryの非デフォルトの場所

Kotlin/JVM KotlinJvmCompile/KotlinCompileタスクのdestinationDirectoryの場所をオーバーライドする場合は、ビルドスクリプトを更新してください。JARファイルでsourceSets.main.kotlin.classesDirectoriessourceSets.main.outputsに明示的に追加する必要があります。

kotlin
tasks.jar(type: Jar) {
    from sourceSets.main.outputs
    from sourceSets.main.kotlin.classesDirectories
}

複数のプラットフォームをターゲットにする

マルチプラットフォームプロジェクトと呼ばれる、複数のプラットフォームをターゲットにするプロジェクトでは、kotlin-multiplatformプラグインが必要です。

NOTE

kotlin-multiplatformプラグインはGradle 7.6.3以降で動作します。

kotlin
plugins {
    kotlin("multiplatform") version "2.1.21"
}
groovy
plugins {
    id 'org.jetbrains.kotlin.multiplatform' version '2.1.21'
}

異なるプラットフォーム向けKotlin MultiplatformおよびiOSとAndroid向けKotlin Multiplatformについて詳しく学ぶ。

Androidをターゲットにする

Androidアプリケーションの作成にはAndroid Studioを使用することをお勧めします。Android Gradleプラグインの使用方法を学びましょう。

JavaScriptをターゲットにする

JavaScriptをターゲットにする場合も、kotlin-multiplatformプラグインを使用します。Kotlin/JSプロジェクトのセットアップ方法について詳しく学ぶ。

kotlin
plugins {
    kotlin("multiplatform") version "2.1.21"
}
groovy
plugins {
    id 'org.jetbrains.kotlin.multiplatform' version '2.1.21'
}

JavaScript向けのKotlinとJavaのソース

このプラグインはKotlinファイルのみで動作するため、KotlinファイルとJavaファイル(プロジェクトにJavaファイルが含まれる場合)は分けておくことをお勧めします。もし分けておかない場合は、sourceSets{}ブロックでソースフォルダを指定してください。

kotlin
kotlin {
    sourceSets["main"].apply {
        kotlin.srcDir("src/main/myKotlin")
    }
}
groovy
kotlin {
    sourceSets {
        main.kotlin.srcDirs += 'src/main/myKotlin'
    }
}

KotlinBasePluginインターフェースによる構成アクションのトリガー

任意のKotlin Gradleプラグイン(JVM、JS、Multiplatform、Nativeなど)が適用されるたびに、何らかの構成アクションをトリガーするには、すべてのKotlinプラグインが継承するKotlinBasePluginインターフェースを使用します。

kotlin
import org.jetbrains.kotlin.gradle.plugin.KotlinBasePlugin

// ...

project.plugins.withType<KotlinBasePlugin>() {
    // Configure your action here
}
groovy
import org.jetbrains.kotlin.gradle.plugin.KotlinBasePlugin

// ...

project.plugins.withType(KotlinBasePlugin.class) {
    // Configure your action here
}

依存関係を構成する

ライブラリへの依存関係を追加するには、ソースセットDSLのdependencies{}ブロックで、必要なタイプの依存関係(例: implementation)を設定します。

kotlin
kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("com.example:my-library:1.0")
        }
    }
}
groovy
kotlin {
    sourceSets {
        commonMain {
            dependencies {
                implementation 'com.example:my-library:1.0'
            }
        }
    }
}

あるいは、トップレベルで依存関係を設定することもできます。

依存関係のタイプ

要件に基づいて依存関係のタイプを選択してください。

タイプ説明使用する場合
apiコンパイル時とランタイム時の両方で使用され、ライブラリの利用者にエクスポートされます。依存関係の型が現在のモジュールのパブリックAPIで使用される場合、api依存関係を使用します。
implementation現在のモジュールのコンパイル時とランタイム時に使用されますが、implementation依存関係を持つモジュールに依存する他のモジュールのコンパイルには公開されません。

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

モジュールが公開されないエンドポイントアプリケーションの場合、api依存関係の代わりにimplementation依存関係を使用します。

compileOnly現在のモジュールのコンパイル時に使用され、ランタイム時および他のモジュールのコンパイル時には利用できません。ランタイム時にサードパーティの実装が利用可能なAPIに使用します。
runtimeOnlyランタイム時には利用可能ですが、どのモジュールのコンパイル時にも可視ではありません。

標準ライブラリへの依存関係

標準ライブラリ(stdlib)への依存関係は、各ソースセットに自動的に追加されます。 使用される標準ライブラリのバージョンは、Kotlin Gradleプラグインのバージョンと同じです。

プラットフォーム固有のソースセットの場合、対応するプラットフォーム固有のライブラリのバリアントが使用され、残りの部分には共通の標準ライブラリが追加されます。Kotlin Gradleプラグインは、GradleビルドスクリプトのcompilerOptions.jvmTargetコンパイラオプションに応じて適切なJVM標準ライブラリを選択します。

標準ライブラリの依存関係を明示的に宣言した場合(例: 異なるバージョンが必要な場合)、Kotlin Gradleプラグインはそれを上書きしたり、2つ目の標準ライブラリを追加したりしません。

標準ライブラリがまったく不要な場合は、gradle.propertiesファイルに次のGradleプロパティを追加できます。

none
kotlin.stdlib.default.dependency=false

推移的依存関係のバージョンアライメント

Kotlin標準ライブラリバージョン1.9.20以降、Gradleは標準ライブラリに含まれるメタデータを使用して、推移的なkotlin-stdlib-jdk7およびkotlin-stdlib-jdk8依存関係を自動的にアライメントします。

Kotlin標準ライブラリのバージョン1.8.0から1.9.10までの依存関係を追加した場合(例: implementation("org.jetbrains.kotlin:kotlin-stdlib:1.8.0"))、Kotlin Gradleプラグインは推移的なkotlin-stdlib-jdk7およびkotlin-stdlib-jdk8依存関係にこのKotlinバージョンを使用します。これにより、異なる標準ライブラリバージョンからのクラスの重複が回避されます。kotlin-stdlib-jdk7kotlin-stdlib-jdk8kotlin-stdlibにマージするについて詳しく学ぶ。 この動作は、gradle.propertiesファイルのkotlin.stdlib.jdk.variants.version.alignment Gradleプロパティで無効にできます。

none
kotlin.stdlib.jdk.variants.version.alignment=false
バージョンをアライメントするその他の方法
  • バージョンアライメントに問題がある場合、KotlinのBOMを介してすべてのバージョンをアライメントできます。 ビルドスクリプトでkotlin-bomに対するプラットフォーム依存関係を宣言してください。

kotlin
  implementation(platform("org.jetbrains.kotlin:kotlin-bom:2.1.21"))
groovy
  implementation platform('org.jetbrains.kotlin:kotlin-bom:2.1.21')

:::

  • 標準ライブラリのバージョンに依存関係を追加していないが、推移的に異なる古いバージョンのKotlin標準ライブラリをもたらす2つの異なる依存関係がある場合、これらの推移的なライブラリに対して明示的に2.1.21バージョンを要求できます。

kotlin
  dependencies {
      constraints {
          add("implementation", "org.jetbrains.kotlin:kotlin-stdlib-jdk7") {
              version {
                  require("2.1.21")
              }
          }
          add("implementation", "org.jetbrains.kotlin:kotlin-stdlib-jdk8") {
              version {
                  require("2.1.21")
              }
          }
      }
  }
groovy
  dependencies {
      constraints {
          add("implementation", "org.jetbrains.kotlin:kotlin-stdlib-jdk7") {
              version {
                  require("2.1.21")
              }
          }
          add("implementation", "org.jetbrains.kotlin:kotlin-stdlib-jdk8") {
              version {
                  require("2.1.21")
              }
          }
      }
  }

:::

  • Kotlin標準ライブラリバージョン2.1.21への依存関係を追加し(implementation("org.jetbrains.kotlin:kotlin-stdlib:2.1.21")など)、古いバージョン(1.8.0より前)のKotlin Gradleプラグインを使用している場合、Kotlin Gradleプラグインを標準ライブラリのバージョンに合わせて更新してください。

kotlin
  plugins {
      // replace `<...>` with the plugin name
      kotlin("<...>") version "2.1.21"
  }
groovy
  plugins {
      // replace `<...>` with the plugin name
      id "org.jetbrains.kotlin.<...>" version "2.1.21"
  }

:::

kotlin
  dependencies {
      implementation("com.example:lib:1.0") {
          exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")
      }
  }
groovy
  dependencies {
      implementation("com.example:lib:1.0") {
          exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib"
      }
  }

:::

テストライブラリの依存関係を設定する

kotlin.test APIは、サポートされているすべてのプラットフォームでKotlinプロジェクトをテストするために利用できます。 kotlin-test依存関係をcommonTestソースセットに追加すると、Gradleプラグインが各テストソースセットに対応するテスト依存関係を推測できます。

Kotlin/Nativeターゲットは追加のテスト依存関係を必要とせず、kotlin.test APIの実装は組み込まれています。

kotlin
kotlin {
    sourceSets {
         commonTest.dependencies {
             implementation(kotlin("test")) // This brings all the platform dependencies automatically
        }
    }
}
groovy
kotlin {
    sourceSets {
        commonTest {
            dependencies {
                implementation kotlin("test") // This brings all the platform dependencies automatically
            }
        }
    }
}

NOTE

Kotlinモジュールへの依存関係には、たとえば"org.jetbrains.kotlin:kotlin-test"の代わりにkotlin("test")のようなショートハンドを使用できます。

kotlin-test依存関係は、共有ソースセットまたはプラットフォーム固有のソースセットでも使用できます。

kotlin-testのJVMバリアント

Kotlin/JVMでは、GradleはデフォルトでJUnit 4を使用します。そのため、kotlin("test")の依存関係はJUnit 4のバリアント、すなわちkotlin-test-junitに解決されます。

ビルドスクリプトのテストタスクでuseJUnitPlatform()またはuseTestNG()を呼び出すことで、JUnit 5またはTestNGを選択できます。 以下の例はKotlin Multiplatformプロジェクトのものです。

kotlin
kotlin {
    jvm {
        testRuns["test"].executionTask.configure {
            useJUnitPlatform()
        }
    }
    sourceSets {
        commonTest.dependencies {
            implementation(kotlin("test"))
        }
    }
}
groovy
kotlin {
    jvm {
        testRuns["test"].executionTask.configure {
            useJUnitPlatform()
        }
    }
    sourceSets {
        commonTest {
            dependencies {
                implementation kotlin("test")
            }
        }
    }
}

以下の例はJVMプロジェクトのものです。

kotlin
dependencies {
    testImplementation(kotlin("test"))
}

tasks {
    test {
        useTestNG()
    }
}
groovy
dependencies {
    testImplementation 'org.jetbrains.kotlin:kotlin-test'
}

test {
    useTestNG()
}

JUnitを使用してJVMでコードをテストする方法を学ぶ。

JVMバリアントの自動解決は、設定に問題を引き起こすことがあります。その場合、必要なフレームワークを明示的に指定し、プロジェクトのgradle.propertiesファイルに以下の行を追加して自動解決を無効にできます。

text
kotlin.test.infer.jvm.variant=false

ビルドスクリプトでkotlin("test")のバリアントを明示的に使用していて、プロジェクトビルドが互換性衝突で動作しなくなった場合は、互換性ガイドのこの問題を参照してください。

kotlinxライブラリの依存関係を設定する

マルチプラットフォームライブラリを使用し、共有コードに依存する必要がある場合は、共有ソースセットにのみ一度依存関係を設定します。ライブラリの基本アーティファクト名(kotlinx-coroutines-corektor-client-coreなど)を使用してください。

kotlin
kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
        }
    }
}
groovy
kotlin {
    sourceSets {
        commonMain {
            dependencies {
                implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2'
            }
        }
    }
}

プラットフォーム固有の依存関係としてkotlinxライブラリが必要な場合でも、対応するプラットフォームソースセットでライブラリの基本アーティファクト名を使用できます。

kotlin
kotlin {
    sourceSets {
        jvmMain.dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
        }
    }
}
groovy
kotlin {
    sourceSets {
        jvmMain {
            dependencies {
                implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2'
            }
        }
    }
}

トップレベルで依存関係を設定する

あるいは、構成名に<sourceSetName><DependencyType>のパターンを使用して、依存関係をトップレベルで指定することもできます。これは、gradleApi()localGroovy()gradleTestKit()など、ソースセットの依存関係DSLでは利用できないGradleの組み込み依存関係の一部に役立つ場合があります。

kotlin
dependencies {
    "commonMainImplementation"("com.example:my-library:1.0")
}
groovy
dependencies {
    commonMainImplementation 'com.example:my-library:1.0'
}

リポジトリを宣言する

公開されているリポジトリを宣言して、そのオープンソースの依存関係を使用できます。repositories{}ブロックでリポジトリの名前を設定します。

kotlin
repositories {
    mavenCentral()
}
groovy
repositories {
    mavenCentral()
}

一般的なリポジトリは、Maven CentralGoogleのMavenリポジトリです。

DANGER

Mavenプロジェクトも扱っている場合は、mavenLocal()をリポジトリとして追加しないことをお勧めします。GradleとMavenプロジェクトを切り替える際に問題が発生する可能性があるためです。もしmavenLocal()リポジトリをどうしても追加する必要がある場合は、repositories{}ブロックの最後に配置してください。詳細については、The case for mavenLocal()をご覧ください。

複数のサブプロジェクトで同じリポジトリを宣言する必要がある場合は、settings.gradle(.kts)ファイルのdependencyResolutionManagement{}ブロックでリポジトリを一元的に宣言します。

kotlin
dependencyResolutionManagement {
    repositories {
        mavenCentral()
    }
}
kotlin
dependencyResolutionManagement {
    repositories {
        mavenCentral()
    }
}

サブプロジェクトで宣言されたリポジトリは、一元的に宣言されたリポジトリを上書きします。この動作を制御する方法や利用可能なオプションの詳細については、Gradleのドキュメントを参照してください。

次のステップ

詳細については、以下をご覧ください。