マルチプラットフォームライブラリの公開設定
マルチプラットフォームライブラリの公開先は、以下の場所に設定できます。
- ローカルのMavenリポジトリへの公開
- Maven Centralリポジトリ。アカウントの認証情報の設定、ライブラリのメタデータのカスタマイズ、公開プラグインの設定方法については、チュートリアルを参照してください。
- GitHubリポジトリ。詳細については、GitHubのドキュメントのGitHub packagesを参照してください。
ローカルのMavenリポジトリへの公開
maven-publish
Gradleプラグインを使用すると、マルチプラットフォームライブラリをローカルのMavenリポジトリに公開できます。
-
shared/build.gradle.kts
ファイルに、maven-publish
Gradleプラグインを追加します。 -
ライブラリのグループとバージョン、および公開先のリポジトリを指定します。
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マシンを使用する必要があります。
- ライブラリにcinterop依存関係がある。
- プロジェクトでCocoaPodsの統合が設定されている。
- Appleターゲットの最終バイナリをビルドまたはテストする必要がある。
パブリケーションの複製
公開中の問題を回避するには、リポジトリでのパブリケーションの複製を避けるため、単一のホストからすべてのアーティファクトを公開してください。たとえば、Maven Centralでは、パブリケーションの複製が明示的に禁止されており、プロセスが失敗します。
Androidライブラリの公開
Androidライブラリを公開するには、追加の構成が必要です。
デフォルトでは、Androidライブラリのアーティファクトは公開されません。Androidのビルドバリアントのセットによって生成されたアーティファクトを公開するには、shared/build.gradle.kts
ファイルのAndroidターゲットブロックでバリアント名を指定します。
kotlin {
androidTarget {
publishLibraryVariants("release")
}
}
この例は、プロダクトフレーバーのないAndroidライブラリで機能します。
プロダクトフレーバーのあるライブラリの場合、バリアント名にはfooBarDebug
やfooBarRelease
のようにフレーバーも含まれます。
デフォルトの公開設定は次のとおりです。
- 公開されたバリアントに同じビルドタイプ(たとえば、すべて
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を参照してください。