Skip to content

マルチプラットフォーム Gradle DSL リファレンス

Kotlin Multiplatform Gradle プラグインは、Kotlin Multiplatform プロジェクトを作成するためのツールです。 ここでは、その内容のリファレンスを提供します。Kotlin Multiplatform プロジェクトの Gradle ビルドスクリプトを記述する際の参考にしてください。Kotlin Multiplatform プロジェクトの概念、作成方法、および構成方法について学習してください。

ID とバージョン

Kotlin Multiplatform Gradle プラグインの完全修飾名は org.jetbrains.kotlin.multiplatform です。 Kotlin Gradle DSL を使用する場合、kotlin("multiplatform") でプラグインを適用できます。 プラグインのバージョンは Kotlin リリースバージョンと一致します。最新バージョンは 2.2.0 です。

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

トップレベルブロック

kotlin {} は、Gradle ビルドスクリプトにおけるマルチプラットフォームプロジェクト構成のトップレベルブロックです。 kotlin {} 内に、以下のブロックを記述できます。

ブロック説明
<targetName>プロジェクトの特定のターゲットを宣言します。利用可能なターゲット名は、ターゲットセクションにリストされています。
targetsプロジェクトのすべてのターゲットをリストします。
sourceSets事前定義されたソースセットを設定し、プロジェクトのカスタムソースセットを宣言します。
compilerOptionsすべてのターゲットおよび共有ソースセットのデフォルトとして使用される共通の拡張レベルコンパイラーオプションを指定します。

ターゲット

_ターゲット_は、サポートされているプラットフォームのいずれかを対象としたソフトウェアをコンパイル、テスト、パッケージ化するビルドの一部です。Kotlin は各プラットフォームに対応するターゲットを提供するため、特定のターゲット用にコードをコンパイルするよう Kotlin に指示できます。ターゲットの設定について詳しく学びましょう。

各ターゲットは1つ以上のコンピレーションを持つことができます。テストおよびプロダクション目的のデフォルトコンピレーションに加えて、カスタムコンピレーションを作成できます。

マルチプラットフォームプロジェクトのターゲットは、kotlin {} 内の対応するブロック(例: jvmandroidTargetiosArm64)で記述されます。 利用可能なターゲットの完全なリストは以下のとおりです。

ターゲットプラットフォームターゲットコメント
Kotlin/JVMjvm
Kotlin/WasmwasmJsプロジェクトを JavaScript ランタイムで実行する予定の場合に使用します。
wasmWasiWASIシステムインターフェースのサポートが必要な場合に使用します。
Kotlin/JSjs

実行環境を選択します:

  • ブラウザーで実行されるアプリケーションにはbrowser {}
  • Node.js で実行されるアプリケーションにはnodejs {}

Kotlin/JS プロジェクトのセットアップで詳細を確認してください。

Kotlin/Native

Kotlin/Native ターゲットサポートで、現在サポートされている macOS、Linux、Windows ホストのターゲットについて学びましょう。

Android アプリケーションとライブラリandroidTarget

Android Gradle プラグインを手動で適用します: com.android.application または com.android.library

Gradle サブプロジェクトごとに作成できる Android ターゲットは1つだけです。

現在のホストでサポートされていないターゲットは、ビルド中に無視されるため、公開されません。

groovy
kotlin {
    jvm()
    iosArm64()
    macosX64()
    js().browser()
}

ターゲットの構成には2つの部分を含めることができます。

  • すべてのターゲットで利用可能な共通設定
  • ターゲット固有の設定。

各ターゲットは1つ以上のコンピレーションを持つことができます。

共通ターゲット設定

どのターゲットブロックでも、以下の宣言を使用できます。

名前説明
platformTypeこのターゲットの Kotlin プラットフォーム。利用可能な値: jvmandroidJvmjswasmnativecommon
artifactsTaskNameこのターゲットの結果アーティファクトをビルドするタスクの名前。
componentsGradle 公開の設定に使用されるコンポーネント。
compilerOptionsターゲットに使用されるコンパイラーオプション。この宣言は、トップレベルで構成された compilerOptions {} をすべてオーバーライドします。

Web ターゲット

js {} ブロックは Kotlin/JS ターゲットの設定を記述し、wasmJs {} ブロックは JavaScript と相互運用可能な Kotlin/Wasm ターゲットの設定を記述します。これらは、ターゲットの実行環境に応じて、2つのブロックのいずれかを含めることができます。

名前説明
browserブラウザターゲットの設定。
nodejsNode.js ターゲットの設定。

Kotlin/JS プロジェクトの設定について詳しく学びましょう。

別の wasmWasi {} ブロックは、WASI システムインターフェースをサポートする Kotlin/Wasm ターゲットの設定を記述します。 ここでは、nodejs 実行環境のみが利用可能です。

kotlin
kotlin {
    wasmWasi {
        nodejs()
        binaries.executable()
    }
}

すべての Web ターゲット、jswasmJs、および wasmWasibinaries.executable() 呼び出しをサポートしています。これは、Kotlin コンパイラに実行可能ファイルを出力するように明示的に指示します。詳細については、Kotlin/JS ドキュメントの実行環境を参照してください。

ブラウザー

browser {} には以下の設定ブロックを含めることができます。

名前説明
testRunsテスト実行の設定。
runTaskプロジェクト実行の設定。
webpackTaskWebpackを使用したプロジェクトのバンドル設定。
distribution出力ファイルへのパス。
kotlin
kotlin {
    js().browser {
        webpackTask { /* ... */ }
        testRuns { /* ... */ }
        distribution {
            directory = File("$projectDir/customdir/")
        }
    }
}

Node.js

nodejs {} には、テストタスクと実行タスクの設定を含めることができます。

名前説明
testRunsテスト実行の設定。
runTaskプロジェクト実行の設定。
kotlin
kotlin {
    js().nodejs {
        runTask { /* ... */ }
        testRuns { /* ... */ }
    }
}

Native ターゲット

Native ターゲットでは、以下の特定のブロックが利用可能です。

名前説明
binaries生成するバイナリの設定。
cinteropsC ライブラリとの相互運用の設定。

バイナリ

バイナリには以下の種類があります。

名前説明
executableプロダクト実行可能ファイル。
testテスト実行可能ファイル。
sharedLib共有ライブラリ。
staticLib静的ライブラリ。
frameworkObjective-C フレームワーク。
kotlin
kotlin {
    linuxX64 { // 代わりにターゲットを使用してください。
        binaries {
            executable {
                // バイナリ設定。
            }
        }
    }
}

バイナリ設定には、以下のパラメータが利用可能です。

名前説明
compilationバイナリがビルドされるコンピレーション。デフォルトでは、test バイナリは test コンピレーションに基づいていますが、他のバイナリは main コンピレーションに基づいています。
linkerOptsバイナリビルド中にシステムリンカーに渡されるオプション。
baseName出力ファイルのカスタムベース名。最終的なファイル名は、このベース名にシステム依存のプレフィックスとポストフィックスを追加して形成されます。
entryPoint実行可能バイナリのエントリポイント関数。デフォルトでは、ルートパッケージの main() です。
outputFile出力ファイルへのアクセス。
linkTaskリンクタスクへのアクセス。
runTask実行可能バイナリの実行タスクへのアクセス。linuxX64macosX64mingwX64 以外のターゲットの場合、値は null です。
isStaticObjective-C フレームワークの場合。ダイナミックライブラリの代わりに静的ライブラリを含めます。
kotlin
binaries {
    executable("my_executable", listOf(RELEASE)) {
        // テストコンピレーションに基づいてバイナリをビルドします。
        compilation = compilations["test"]

        // リンカー用のカスタムコマンドラインオプション。
        linkerOpts = mutableListOf("-L/lib/search/path", "-L/another/search/path", "-lmylib")

        // 出力ファイルのベース名。
        baseName = "foo"

        // カスタムエントリポイント関数。
        entryPoint = "org.example.main"

        // 出力ファイルにアクセスします。
        println("Executable path: ${outputFile.absolutePath}")

        // リンクタスクにアクセスします。
        linkTask.dependsOn(additionalPreprocessingTask)

        // 実行タスクにアクセスします。
        // ホスト以外のプラットフォームでは runTask が null になることに注意してください。
        runTask?.dependsOn(prepareForRun)
    }

    framework("my_framework" listOf(RELEASE)) {
        // 動的ライブラリの代わりに静的ライブラリをフレームワークに含めます。
        isStatic = true
    }
}
groovy
binaries {
    executable('my_executable', [RELEASE]) {
        // テストコンピレーションに基づいてバイナリをビルドします。
        compilation = compilations.test

        // リンカー用のカスタムコマンドラインオプション。
        linkerOpts = ['-L/lib/search/path', '-L/another/search/path', '-lmylib']

        // 出力ファイルのベース名。
        baseName = 'foo'

        // カスタムエントリポイント関数。
        entryPoint = 'org.example.main'

        // 出力ファイルにアクセスします。
        println("Executable path: ${outputFile.absolutePath}")

        // リンクタスクにアクセスします。
        linkTask.dependsOn(additionalPreprocessingTask)

        // 実行タスクにアクセスします。
        // ホスト以外のプラットフォームでは runTask が null になることに注意してください。
        runTask?.dependsOn(prepareForRun)
    }

    framework('my_framework' [RELEASE]) {
        // 動的ライブラリの代わりに静的ライブラリをフレームワークに含めます。
        isStatic = true
    }
}

Native バイナリのビルドについて詳しく学びましょう。

Cinterops

cinterops は、Native ライブラリとの相互運用に関する記述のコレクションです。 ライブラリとの相互運用を提供するには、cinterops にエントリを追加し、そのパラメータを定義します。

名前説明
definitionFileNative API を記述する .def ファイル。
packageName生成された Kotlin API のパッケージプレフィックス。
compilerOptscinterop ツールによってコンパイラに渡されるオプション。
includeDirsヘッダーを検索するディレクトリ。
headerバインディングに含めるヘッダー。
headersバインディングに含めるヘッダーのリスト。
kotlin
kotlin {
    linuxX64 { // 必要なターゲットに置き換えてください。
        compilations.getByName("main") {
            val myInterop by cinterops.creating {
                // Native API を記述する定義ファイル。
                // デフォルトパスは src/nativeInterop/cinterop/<interop-name>.def
                definitionFile.set(project.file("def-file.def"))

                // 生成される Kotlin API を配置するパッケージ。
                packageName("org.sample")

                // cinterop ツールによってコンパイラに渡されるオプション。
                compilerOpts("-Ipath/to/headers")

                // ヘッダー検索用のディレクトリ (コンパイラオプション -I<path> のアナロジー)。
                includeDirs.allHeaders("path1", "path2")

                // includeDirs.allHeaders のショートカット。
                includeDirs("include/directory", "another/directory")

                // バインディングに含めるヘッダーファイル。
                header("path/to/header.h")
                headers("path/to/header1.h", "path/to/header2.h")
            }

            val anotherInterop by cinterops.creating { /* ... */ }
        }
    }
}
groovy
kotlin {
    linuxX64 { // 必要なターゲットに置き換えてください。
        compilations.main {
            cinterops {
                myInterop {
                    // Native API を記述する定義ファイル。
                    // デフォルトパスは src/nativeInterop/cinterop/<interop-name>.def
                    definitionFile = project.file("def-file.def")

                    // 生成される Kotlin API を配置するパッケージ。
                    packageName 'org.sample'

                    // cinterop ツールによってコンパイラに渡されるオプション。
                    compilerOpts '-Ipath/to/headers'

                    // ヘッダー検索用のディレクトリ (コンパイラオプション -I<path> のアナロジー)。
                    includeDirs.allHeaders("path1", "path2")

                    // includeDirs.allHeaders のショートカット。
                    includeDirs("include/directory", "another/directory")

                    // バインディングに含めるヘッダーファイル。
                    header("path/to/header.h")
                    headers("path/to/header1.h", "path/to/header2.h")
                }

                anotherInterop { /* ... */ }
            }
        }
    }
}

より多くの cinterop プロパティについては、Definition file を参照してください。

Android ターゲット

Kotlin Multiplatform プラグインには、Android ターゲットのビルドバリアントを設定するのに役立つ特定の機能があります。

名前説明
publishLibraryVariants()公開するビルドバリアントを指定します。Android ライブラリの公開について詳しく学びましょう。
kotlin
kotlin {
    androidTarget {
        publishLibraryVariants("release")
    }
}

Android のコンパイルについて詳しく学びましょう。

kotlin {} ブロック内の androidTarget 設定は、Android プロジェクトのビルド設定を置き換えるものではありません。 Android プロジェクトのビルドスクリプトの作成については、Android developer documentation を参照してください。

ソースセット

sourceSets {} ブロックはプロジェクトのソースセットを記述します。ソースセットには、そのリソースと依存関係とともに、コンピレーションに一緒に参加する Kotlin ソースファイルが含まれます。

マルチプラットフォームプロジェクトには、そのターゲットに対応する事前定義されたソースセットが含まれています。開発者は、必要に応じてカスタムソースセットを作成することもできます。

事前定義されたソースセット

事前定義されたソースセットは、マルチプラットフォームプロジェクトの作成時に自動的に設定されます。 利用可能な事前定義されたソースセットは以下のとおりです。

名前説明
commonMainすべてのプラットフォーム間で共有されるコードとリソース。すべてのマルチプラットフォームプロジェクトで利用可能です。プロジェクトのすべての main コンピレーションで使用されます。
commonTestすべてのプラットフォーム間で共有されるテストコードとリソース。すべてのマルチプラットフォームプロジェクトで利用可能です。プロジェクトのすべてのテストコンピレーションで使用されます。
<targetName><compilationName>コンピレーションのターゲット固有のソース。<targetName> は事前定義されたターゲットの名前であり、<compilationName> はこのターゲットのコンピレーションの名前です。例: jsTestjvmMain
kotlin
kotlin {
    //...
    sourceSets {
        commonMain { /* ... */ }
    }
}
groovy
kotlin {
    //...
    sourceSets { 
        commonMain { /* ... */ }
    }
}

ソースセットについて詳しく学びましょう。

カスタムソースセット

カスタムソースセットは、プロジェクト開発者が手動で作成します。 カスタムソースセットを作成するには、sourceSets セクション内にその名前のセクションを追加します。 Kotlin Gradle DSL を使用する場合は、カスタムソースセットを by creating でマークします。

kotlin
kotlin {
    //...
    sourceSets { 
        val myMain by creating { /* ... */ } // 'MyMain' という名前で新しいソースセットを作成します
    }
}
groovy
kotlin {
    //...
    sourceSets { 
        myMain { /* ... */ } // 'myMain' という名前でソースセットを作成または設定します 
    }
}

新しく作成されたソースセットは他のソースセットとは接続されていません。プロジェクトのコンピレーションで使用するには、他のソースセットと接続してください。

ソースセットパラメータ

ソースセットの設定は、sourceSets {} の対応するブロック内に格納されます。ソースセットには以下のパラメータがあります。

名前説明
kotlin.srcDirソースセットディレクトリ内の Kotlin ソースファイルの場所。
resources.srcDirソースセットディレクトリ内のリソースの場所。
dependsOn他のソースセットとの接続
dependenciesソースセットの依存関係
languageSettings共有ソースセットに適用される言語設定
kotlin
kotlin { 
    //...
    sourceSets { 
        commonMain {
            kotlin.srcDir("src")
            resources.srcDir("res")

            dependencies {
                /* ... */
            }
        }
    }
}
groovy
kotlin { 
    //...
    sourceSets { 
        commonMain {
            kotlin.srcDir('src')
            resources.srcDir('res')

            dependencies {
                /* ... */
            }
        }
    }
}

コンピレーション

ターゲットは、プロダクション用またはテスト用など、1つ以上のコンピレーションを持つことができます。ターゲット作成時に自動的に追加される事前定義されたコンピレーションがあります。さらにカスタムコンピレーションを作成することもできます。

ターゲットのすべてのコンピレーションまたは特定のコンピレーションを参照するには、compilations オブジェクトコレクションを使用します。 compilations から、名前でコンピレーションを参照できます。

コンピレーションの設定について詳しく学びましょう。

事前定義されたコンピレーション

事前定義されたコンピレーションは、Android ターゲットを除くプロジェクトの各ターゲットに対して自動的に作成されます。 利用可能な事前定義されたコンピレーションは以下のとおりです。

名前説明
mainプロダクションソースのコンピレーション。
testテストのコンピレーション。
kotlin
kotlin {
    jvm {
        val main by compilations.getting {
            output // main コンピレーションの出力を取得します
        }

        compilations["test"].runtimeDependencyFiles // テストランタイムクラスパスを取得します
    }
}
groovy
kotlin {
    jvm {
        compilations.main.output // main コンピレーションの出力を取得します
        compilations.test.runtimeDependencyFiles // テストランタイムクラスパスを取得します
    }
}

カスタムコンピレーション

事前定義されたコンピレーションに加えて、独自のカスタムコンピレーションを作成できます。 そのためには、新しいコンピレーションと main コンピレーションとの間に associateWith 関係を設定します。Kotlin Gradle DSL を使用している場合は、カスタムコンピレーションを by creating でマークします。

kotlin
kotlin {
    jvm {
        compilations {
            val main by getting
            val integrationTest by creating {
                // main とそのクラスパスを依存関係としてインポートし、internal 可視性を確立します
                associateWith(main)
                defaultSourceSet {
                    dependencies {
                        implementation(kotlin("test-junit"))
                        /* ... */
                    }
                }

                // このコンピレーションによって生成されたテストを実行するテストタスクを作成します
                testRuns.create("integration") {
                    // テストタスクを設定します
                    setExecutionSourceFrom(integrationTest)
                }
            }
        }
    }
}
groovy
kotlin {
    jvm {
        compilations.create('integrationTest') {
            def main = compilations.main
            // main とそのクラスパスを依存関係としてインポートし、internal 可視性を確立します
            associateWith(main)
            defaultSourceSet {
                dependencies {
                    implementation kotlin('test-junit')
                    /* ... */
                }
            }

            // このコンピレーションによって生成されたテストを実行するテストタスクを作成します
            testRuns.create('integration') {
                // テストタスクを設定します
                setExecutionSourceFrom(compilations.integrationTest)
            }
        }
    }
}

コンピレーションを関連付けることで、メインコンピレーションの出力を依存関係として追加し、コンピレーション間の internal 可視性を確立します。

カスタムコンピレーションの作成について詳しく学びましょう。

コンピレーションパラメータ

コンピレーションには以下のパラメータがあります。

名前説明
defaultSourceSetコンピレーションのデフォルトソースセット。
kotlinSourceSetsコンピレーションに参加するソースセット。
allKotlinSourceSetsコンピレーションに参加するソースセットと dependsOn() を介したそれらの接続。
compilerOptionsコンピレーションに適用されるコンパイラーオプション。利用可能なオプションのリストについては、コンパイラーオプションを参照してください。
compileKotlinTaskKotlin ソースをコンパイルするための Gradle タスク。
compileKotlinTaskNamecompileKotlinTask の名前。
compileAllTaskNameコンピレーションのすべてのソースをコンパイルするための Gradle タスクの名前。
outputコンピレーションの出力。
compileDependencyFilesコンピレーションのコンパイル時依存ファイル (クラスパス)。すべての Kotlin/Native コンピレーションでは、標準ライブラリとプラットフォームの依存関係が自動的に含まれます。
runtimeDependencyFilesコンピレーションのランタイム依存ファイル (クラスパス)。
kotlin
kotlin {
    jvm {
        val main by compilations.getting {
            compileTaskProvider.configure {
                compilerOptions {
                    // 'main' コンピレーションの Kotlin コンパイラーオプションを設定します:
                    jvmTarget.set(JvmTarget.JVM_1_8)
                }
            }
        
            compileKotlinTask // Kotlin タスク 'compileKotlinJvm' を取得します 
            output // main コンピレーションの出力を取得します
        }
        
        compilations["test"].runtimeDependencyFiles // テストランタイムクラスパスを取得します
    }

    // すべてのターゲットのすべてのコンピレーションを設定します:
    compilerOptions {
        allWarningsAsErrors.set(true)
    }
}
groovy
kotlin {
    jvm {
        compilations.main {
            compileTaskProvider.configure {
                compilerOptions {
                    // 'main' コンピレーションの Kotlin コンパイラーオプションを設定します:
                    jvmTarget = JvmTarget.JVM_1_8
                }
            }
        }

        compilations.main.compileKotlinTask // Kotlin タスク 'compileKotlinJvm' を取得します 
        compilations.main.output // main コンピレーションの出力を取得します
        compilations.test.runtimeDependencyFiles // テストランタイムクラスパスを取得します
    }

    // すべてのターゲットのすべてのコンピレーションを設定します:
    compilerOptions {
        allWarningsAsErrors = true
    }
}

コンパイラーオプション

プロジェクトのコンパイラーオプションは、次の3つの異なるレベルで設定できます。

  • 拡張レベル: kotlin {} ブロック内。
  • ターゲットレベル: ターゲットブロック内。
  • コンピレーションユニットレベル: 通常、特定のコンピレーションタスク内。

Kotlin コンパイラーオプションのレベル

上位レベルの設定は、下位レベルのデフォルトとして機能します。

  • 拡張レベルで設定されたコンパイラーオプションは、commonMainnativeMaincommonTest のような共有ソースセットを含むターゲットレベルのオプションのデフォルトです。
  • ターゲットレベルで設定されたコンパイラーオプションは、compileKotlinJvmcompileTestKotlinJvm タスクのようなコンピレーションユニット(タスク)レベルのオプションのデフォルトです。

下位レベルで行われた設定は、上位レベルの同様の設定をオーバーライドします。

  • タスクレベルのコンパイラーオプションは、ターゲットレベルまたは拡張レベルの同様の設定をオーバーライドします。
  • ターゲットレベルのコンパイラーオプションは、拡張レベルの同様の設定をオーバーライドします。

設定可能なコンパイラーオプションのリストについては、すべてのコンパイラーオプションを参照してください。

拡張レベル

プロジェクト内のすべてのターゲットのコンパイラーオプションを設定するには、トップレベルの compilerOptions {} ブロックを使用します。

kotlin
kotlin {
    // すべてのターゲットのすべてのコンピレーションを設定します
    compilerOptions {
        allWarningsAsErrors.set(true)
    }
}
groovy
kotlin {
    // すべてのターゲットのすべてのコンピレーションを設定します:
    compilerOptions {
        allWarningsAsErrors = true
    }
}

ターゲットレベル

プロジェクト内の特定のターゲットのコンパイラーオプションを設定するには、ターゲットブロック内の compilerOptions {} ブロックを使用します。

kotlin
kotlin {
    jvm {
        // JVM ターゲットのすべてのコンピレーションを設定します
        compilerOptions {
            allWarningsAsErrors.set(true)
        }
    }
}
groovy
kotlin {
    jvm {
        // JVM ターゲットのすべてのコンピレーションを設定します
        compilerOptions {
            allWarningsAsErrors = true
        }
    }
}

コンピレーションユニットレベル

特定のタスクのコンパイラーオプションを設定するには、タスク内の compilerOptions {} ブロックを使用します。

kotlin
task.named<KotlinJvmCompile>("compileKotlinJvm") {
    compilerOptions {
        allWarningsAsErrors.set(true)
    }
}
groovy
task.named<KotlinJvmCompile>("compileKotlinJvm") {
    compilerOptions {
        allWarningsAsErrors = true
    }
}

特定のコンピレーションのコンパイラーオプションを設定するには、コンピレーションのタスクプロバイダー内で compilerOptions {} ブロックを使用します。

kotlin
kotlin {
    jvm {
        compilations.named(KotlinCompilation.MAIN_COMPILATION_NAME) {
            compileTaskProvider.configure {
                // 'main' コンピレーションを設定します:
                compilerOptions {
                    allWarningsAsErrors.set(true)
                }
            }
        }
    }
}
groovy
kotlin {
    jvm {
        compilations.named(KotlinCompilation.MAIN_COMPILATION_NAME) {
            compileTaskProvider.configure {
                // 'main' コンピレーションを設定します:
                compilerOptions {
                    allWarningsAsErrors = true
                }
            }
        }
    }
}

kotlinOptions {} から compilerOptions {} への移行

Kotlin 2.2.0 より前は、kotlinOptions {} ブロックを使用してコンパイラーオプションを設定できました。kotlinOptions {} ブロックは Kotlin 2.2.0 で非推奨になったため、代わりにビルドスクリプトで compilerOptions {} ブロックを使用する必要があります。 詳細については、kotlinOptions{} から compilerOptions{} への移行を参照してください。

依存関係

ソースセット宣言の dependencies {} ブロックには、このソースセットの依存関係が含まれます。

依存関係の設定について詳しく学びましょう。

依存関係には4つのタイプがあります。

名前説明
api現在のモジュールの API で使用される依存関係。
implementationモジュール内で使用されるが、外部に公開されない依存関係。
compileOnly現在のモジュールのコンパイルのみに使用される依存関係。
runtimeOnly実行時に利用可能だが、どのモジュールのコンパイル時にも見えない依存関係。
kotlin
kotlin {
    //...
    sourceSets {
        commonMain {
            dependencies {
                api("com.example:foo-metadata:1.0")
            }
        }
        jvmMain {
            dependencies {
                implementation("com.example:foo-jvm:1.0")
            }
        }
    }
}
groovy
kotlin {
    //...
    sourceSets {
        commonMain {
            dependencies {
                api 'com.example:foo-metadata:1.0'
            }
        }
        jvmMain {
            dependencies {
                implementation 'com.example:foo-jvm:1.0'
            }
        }
    }
}

さらに、ソースセットは互いに依存し、階層を形成することができます。 この場合、dependsOn() 関係が使用されます。

言語設定

ソースセットの languageSettings {} ブロックは、プロジェクトの解析とコンパイルの特定の側面を定義します。languageSettings {} ブロックは、共有ソースセットに特に適用される設定を構成する場合にのみ使用してください。その他のすべてのケースでは、compilerOptions {} ブロックを使用して、拡張レベルまたはターゲットレベルでコンパイラーオプションを設定してください。

以下の言語設定が利用可能です。

名前説明
languageVersion指定されたバージョンの Kotlin とのソース互換性を提供します。
apiVersion指定されたバージョンの Kotlin バンドルライブラリからの宣言のみを使用できるようにします。
enableLanguageFeature指定された言語機能を有効にします。利用可能な値は、現在実験的な、またはある時点で実験的として導入された言語機能に対応します。
optIn指定されたオプトインアノテーションの使用を許可します。
progressiveModeプログレッシブモードを有効にします。
kotlin
kotlin {
    sourceSets.all {
        languageSettings.apply {
            languageVersion = "2.2" // 利用可能な値: "1.8", "1.9", "2.0", "2.1"
            apiVersion = "2.2" // 利用可能な値: "1.8", "1.9", "2.0", "2.1"
            enableLanguageFeature("InlineClasses") // 言語機能名
            optIn("kotlin.ExperimentalUnsignedTypes") // アノテーションの完全修飾名
            progressiveMode = true // デフォルトは false
        }
    }
}
groovy
kotlin {
    sourceSets.all {
        languageSettings {
            languageVersion = '2.2' // 利用可能な値: '1.8', '1.9', '2.0', '2.1'
            apiVersion = '2.2' // 利用可能な値: '1.8', '1.9', '2.0', '2.1'
            enableLanguageFeature('InlineClasses') // 言語機能名
            optIn('kotlin.ExperimentalUnsignedTypes') // アノテーションの完全修飾名
            progressiveMode = true // デフォルトは false
        }
    }
}