メインコンテンツまでスキップ

マルチプラットフォームライブラリの公開設定

マルチプラットフォームライブラリの公開先は、以下の場所に設定できます。

ローカルのMavenリポジトリへの公開

maven-publish Gradleプラグインを使用すると、マルチプラットフォームライブラリをローカルのMavenリポジトリに公開できます。

  1. shared/build.gradle.ktsファイルに、maven-publish Gradleプラグインを追加します。

  2. ライブラリのグループとバージョン、および公開先のリポジトリを指定します。

    plugins {
    // ...
    id("maven-publish")
    }

    group = "com.example"
    version = "1.0"

    publishing {
    repositories {
    maven {
    //...
    }
    }
    }

maven-publishとともに使用すると、Kotlinプラグインは、現在のホストでビルドできる各ターゲットに対して自動的にパブリケーションを作成します。ただし、Androidターゲットは例外で、公開を設定するための追加の手順が必要です。

パブリケーションの構造

マルチプラットフォームライブラリのパブリケーションには、ライブラリ全体を表す追加の_root_パブリケーションkotlinMultiplatformが含まれており、共通ソースセットへの依存関係として追加されると、適切なプラットフォーム固有のアーティファクトに自動的に解決されます。依存関係の追加の詳細をご覧ください。

このkotlinMultiplatformパブリケーションには、メタデータアーティファクトが含まれており、他のパブリケーションをそのバリアントとして参照します。

注記

Maven Centralなどの一部のリポジトリでは、ルートモジュールにclassifierなしのJARアーティファクト(kotlinMultiplatform-1.0.jarなど)が含まれている必要があります。 Kotlin Multiplatformプラグインは、必要なアーティファクトを埋め込みメタデータアーティファクトとともに自動的に生成します。 これは、リポジトリの要件を満たすために、空のアーティファクトをライブラリのルートモジュールに追加してビルドをカスタマイズする必要がないことを意味します。

kotlinMultiplatformパブリケーションには、リポジトリで必要な場合に、ソースおよびドキュメントアーティファクトも必要になる場合があります。その場合は、パブリケーションのスコープでartifact(...)を使用して、これらのアーティファクトを追加します。

ホストの要件

Kotlin/Nativeはクロスコンパイルをサポートしており、どのホストでも必要な.klibアーティファクトを生成できます。 ただし、留意すべき点がいくつかあります。

Appleターゲットのコンパイル

Appleターゲットを含むプロジェクトのアーティファクトを生成するには、通常、Appleマシンが必要です。 ただし、他のホストを使用する場合は、gradle.propertiesファイルでこのオプションを設定します。

kotlin.native.enableKlibsCrossCompilation=true

クロスコンパイルは現在試験的であり、いくつかの制限があります。次の場合、Macマシンを使用する必要があります。

パブリケーションの複製

公開中の問題を回避するには、リポジトリでのパブリケーションの複製を避けるため、単一のホストからすべてのアーティファクトを公開してください。たとえば、Maven Centralでは、パブリケーションの複製が明示的に禁止されており、プロセスが失敗します。

Androidライブラリの公開

Androidライブラリを公開するには、追加の構成が必要です。

デフォルトでは、Androidライブラリのアーティファクトは公開されません。Androidのビルドバリアントのセットによって生成されたアーティファクトを公開するには、shared/build.gradle.ktsファイルのAndroidターゲットブロックでバリアント名を指定します。

kotlin {
androidTarget {
publishLibraryVariants("release")
}
}

この例は、プロダクトフレーバーのないAndroidライブラリで機能します。 プロダクトフレーバーのあるライブラリの場合、バリアント名にはfooBarDebugfooBarReleaseのようにフレーバーも含まれます。

デフォルトの公開設定は次のとおりです。

  • 公開されたバリアントに同じビルドタイプ(たとえば、すべてreleaseまたはdebug)がある場合、 それらは任意のコンシューマーのビルドタイプと互換性があります。
  • 公開されたバリアントに異なるビルドタイプがある場合、リリースバリアントのみが互換性を持つ コンシューマーのビルドタイプで、公開されたバリアントに含まれていないもの。他のすべてのバリアント(debugなど) コンシューマープロジェクトが指定しない限り、コンシューマー側で同じビルドタイプのみに一致します 一致するフォールバック

公開されたすべてのAndroidバリアントを、ライブラリのコンシューマーが使用する同じビルドタイプとのみ互換性を持たせる場合は、 このGradleプロパティを設定します。kotlin.android.buildTypeAttribute.keep=true

プロダクトフレーバーでグループ化されたバリアントを公開して、異なるビルドタイプの出力が配置されるようにすることもできます 単一のモジュールで、ビルドタイプはアーティファクトのclassifierになります(リリースビルドタイプはclassifierなしで公開されます)。このモードはデフォルトで無効になっており、shared/build.gradle.ktsファイルで次のように有効にできます。

kotlin {
androidTarget {
publishLibraryVariantsGroupedByFlavor = true
}
}
注記

依存関係が異なる場合に、プロダクトフレーバーでグループ化されたバリアントを公開することは推奨されません。 それらは1つの依存関係リストにマージされるためです。

ソース公開の無効化

デフォルトでは、Kotlin Multiplatform Gradleプラグインは、指定されたすべてのターゲットのソースを公開します。ただし、 shared/build.gradle.ktsファイルでwithSourcesJar() APIを使用して、ソースの公開を構成および無効化できます。

  • すべてのターゲットのソース公開を無効にするには:

    kotlin {
    withSourcesJar(publish = false)

    jvm()
    linuxX64()
    }
  • 指定されたターゲットでのみソース公開を無効にするには:

    kotlin {
    // Disable sources publication only for JVM:
    jvm {
    withSourcesJar(publish = false)
    }
    linuxX64()
    }
  • 指定されたターゲットを除くすべてのターゲットのソース公開を無効にするには:

    kotlin {
    // Disable sources publication for all targets except for JVM:
    withSourcesJar(publish = false)

    jvm {
    withSourcesJar(publish = true)
    }
    linuxX64()
    }

JVM環境属性の公開を無効にする

Kotlin 2.0.0以降、Gradle属性org.gradle.jvm.environment は、Kotlin MultiplatformライブラリのJVMバリアントとAndroidバリアントを区別するために、すべてのKotlinバリアントとともに自動的に公開されます。属性は、どのライブラリバリアントがどのJVM環境に適しているかを示し、Gradleはこの情報を使用して、プロジェクトでの依存関係の解決を支援します。ターゲット環境は、「android」、「standard-jvm」、または「no-jvm」にすることができます。

この属性の公開を無効にするには、次のGradleプロパティをgradle.propertiesファイルに追加します。

kotlin.publishJvmEnvironmentAttribute=false

ライブラリを宣伝する

あなたのライブラリはJetBrainsの検索プラットフォームで紹介できます。 ターゲットプラットフォームに基づいてKotlin Multiplatformライブラリを簡単に検索できるように設計されています。

基準を満たすライブラリは自動的に追加されます。ライブラリの追加方法の詳細については、FAQを参照してください。

次のステップ