MavenCentral を使用して、Kotlin マルチプラットフォーム ライブラリ (KMM、KMP) のリモート依存関係を公開する

序文

開発者は独自のオープン ソース ライブラリを作成することができます。以前は Android や JVM プラットフォームなどの単一のプラットフォームのみを行っていましたが、現時点では jitpack を直接使用するだけで、リモートの依存関係を簡単にリリースできます。

jitpack リファレンス:

オープン ソース ライブラリの公開の穴に足を踏み入れた経験: jitpack.io_Li Xiaobai のブログ

Kotlin は、expect を介してネイティブのマルチプラットフォーム プロジェクト (またはライブラリ) を実装できるようになりました. 現時点では、MavenCentral を使用して公開できるマルチプラットフォーム ライブラリを開発しました。

expect参考:

KMM Kotlin を宣言するいくつかの方法 expect_Li Xiaobai のブログ

文章

次に、Kotlin マルチプラットフォーム ライブラリを公開する方法を見てみましょう。

1. まず、マルチプラットフォーム ライブラリを作成できます。以下を参照できます。

KMM+Compose は Kotlin マルチプラットフォーム アプリケーションを開発します_kotlin kmm_Li Xiaobai のブログ

マルチプラットフォーム ライブラリを作成して公開する – チュートリアル | Kotlin ドキュメント (kotlinlang.org)

2. Sonatype Jira アカウントを登録します (これが最初の操作である場合は、この手順から始めてください。それ以外の場合は、手順 11 から始めてください)。

Jira にサインアップする - Sonatype JIRA

上記のリンクを入力し、登録する情報を入力します。登録が完了したら、ユーザー名とパスワードを使用する必要があります

3. 質問を作成する (はい!)

登録が成功すると、通常はこのページにジャンプします。この場所をクリックして質問を作成できます。

次に、次のように入力します。

4. グループ ID の所有権を確認する

上記の質問を送信すると、ロボットが次のようにメッセージに返信します。

彼が投稿したOSSRH-XXXという名前の公開Githubリポジトリを作成できます

Github を使用して作成した後、ステータスをここで開くように変更します。通常、ドロップダウンの後の最初の行です (私はここで行いました)。 

 ステータスを設定すると、しばらくするとロボットのメッセージが表示されます

5. キーを生成する

次に、GPG を使用してキーを生成する必要があります

Windows は次のリンクを使用してダウンロードおよびインストールでき、他のシステムはそれを自分で見つけることができます。

Gpg4win - Windows 用の GnuPG による安全な電子メールとファイルの暗号化

次のステップに進んでインストールしてください

次に、cmd コマンド ラインを開き、次のように入力します。

gpg --full-gen-key

次に、さまざまな情報を入力するように求められます (途中で y/n と入力する場合は、y と入力します)。

鍵の種類 RSA 

キーサイズ 4096

有効期限 0 (有効期限がないことを意味します)

名前

電子メール (その後の使用)

コメントは空白のままにすることができます

 パスワード(後で使用するため)

6. キー情報を取得する

次のコマンドを入力して、上記の手順が成功したことを確認します。

gpg --list-keys

この情報が得られれば成功です。

赤いボックス (キー ID) で選択された最後の 8 桁は、キーの指紋である後で使用する必要があります。

 次に、公開鍵をサーバーにアップロードします

gpg --keyserver keyserver.ubuntu.com --send-keys <你的密钥指纹>

 次に、次のコマンドを使用して秘密鍵をローカルに保存します。これは後で使用する必要があります

gpg --export-secret-keys -o <保存的文件地址>

一般的なファイル名は secring.gpg を使用します

ps: Linux または Macos では、次のコマンドを使用する必要がある場合があります (私の Windows では使用できません)。

gpg --export-secret-keys <密钥指纹> | base64

7. Gradle プリコンパイル済みスクリプト プラグインを構成する

まず、convention-plugins という名前のモデルをプロジェクトに作成します

次に、次のようにディレクトリを作成します。私のプロジェクト構成 ( ComposeViews ) を参照できます。

ps: ディレクトリの場所に注意する必要があります

モデルの build.gradle.kts に次のコードを記述します。

plugins {
    `kotlin-dsl` // Is needed to turn our build logic written in Kotlin into the Gradle Plugin
}

repositories {
    gradlePluginPortal() // To use 'maven-publish' and 'signing' plugins in our own plugin
}

ファイル Convention.publication.gradle.kts に次のコードを記述します。

import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.bundling.Jar
import org.gradle.kotlin.dsl.`maven-publish`
import org.gradle.kotlin.dsl.signing
import java.util.*

plugins {
    `maven-publish`
    signing
}

// Stub secrets to let the project sync and build without the publication values set up
ext["signing.keyId"] = null
ext["signing.password"] = null
ext["signing.secretKeyRingFile"] = null
ext["ossrhUsername"] = null
ext["ossrhPassword"] = null

// Grabbing secrets from local.properties file or from environment variables, which could be used on CI
val secretPropsFile = project.rootProject.file("local.properties")
if (secretPropsFile.exists()) {
    secretPropsFile.reader().use {
        Properties().apply {
            load(it)
        }
    }.onEach { (name, value) ->
        ext[name.toString()] = value
    }
} else {
    ext["signing.keyId"] = System.getenv("SIGNING_KEY_ID")
    ext["signing.password"] = System.getenv("SIGNING_PASSWORD")
    ext["signing.secretKeyRingFile"] = System.getenv("SIGNING_SECRET_KEY_RING_FILE")
    ext["ossrhUsername"] = System.getenv("OSSRH_USERNAME")
    ext["ossrhPassword"] = System.getenv("OSSRH_PASSWORD")
}

val javadocJar by tasks.registering(Jar::class) {
    archiveClassifier.set("javadoc")
}

fun getExtraString(name: String) = ext[name]?.toString()

publishing {
    // Configure maven central repository
    repositories {
        maven {
            name = "sonatype"
            setUrl("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/")
            credentials {
                username = getExtraString("ossrhUsername")
                password = getExtraString("ossrhPassword")
            }
        }
    }

    // Configure all publications
    publications.withType<MavenPublication> {
        // Stub javadoc.jar artifact
        artifact(javadocJar.get())

        // Provide artifacts information requited by Maven Central
        pom {
            name.set("<你的项目名>")
            description.set("<你的项目描述>")
            url.set("<你的项目地址>")

            licenses {
                license {
                    name.set("<开源协议,比如 Apache License 2.0>")
                    url.set("<开源协议地址,比如 http://www.apache.org/licenses/>")
                }
            }
            developers {
                developer {
                    id.set("<你的Github名字>")
                    name.set("<你的Github昵称>")
                    email.set("<你的Github邮箱>")
                }
            }
            scm {
                url.set("<你的项目地址>")
            }
        }
    }
}

// Signing artifacts. Signing.* extra properties values will be used
signing {
    sign(publishing.publications)
}

8. 設定パラメータ

秘密鍵ファイル secring.gpg をプロジェクトのルート ディレクトリにコピーします。

プロジェクトのルート ディレクトリにある local.properties ファイルに次の構成を追加します。

signing.keyId=<密钥指纹>
signing.password=<密钥密码>
signing.secretKeyRingFile=../secring.gpg
ossrhUsername=<Sonatype Jira的Username>
ossrhPassword=<Sonatype Jira的Password>

次に、これら 2 つのファイルを .gitignore ファイルにアップロードしないように構成します。

secring.gpg
local.properties

9. Gradle プリコンパイル済みスクリプト プラグインを使用する

プロジェクトのルート ディレクトリにある settings.gradle.kts ファイルで構成します。

rootProject.name = "<你的项目名>"
includeBuild("convention-plugins")

公開する必要があるモデルの build.gradle.kts で構成します。

plugins {
    //kotlin("multiplatform") version xxx
    ...
    
    id("convention.publication")
}

次に、グラドルを同期します

ps: パブリッシュするモデルのモデル名は、後でリモート依存プロジェクトの名前になります。たとえば、my model:

赤いボックスで選択されたモデルの名前は croe でしたが、彼が私のために生成した依存関係のアドレスは次のとおりです: io.github.ltttttttttttt:core:xxx

10. ターゲット構成の公開

公開する必要があるモデルの build.gradle.kts では、次のプラグインの構成に加えて、さらに構成する必要があります。

id("convention.publication")

グループ ID とバージョン番号を構成します。

group = "io.github.<你的Github名字>"
version = "<版本号>"

ps: 以前に jitpack でパッケージを送信したことがある場合は、テスト後に同じバージョンが競合するため、後で書き込むバージョン番号は jitpack よりも大きくする必要があります。 

Kotlin マルチプラットフォーム ターゲットを構成する

kotlin {
    //发布android target
    android {
        //发布安卓需要额外配置这两个变体
        publishLibraryVariants("debug", "release")
        ...
    }
    //发布jvm的desktop的target
    jvm("desktop") {
        ...
    }
    //发布js target
    js(...){
        ...
    }
}

以下のスクリーンショット:

11. プロジェクト製品をリモート サーバーにアップロードする

エラーを報告せずにデバッグした後、次のコマンドを使用して [ターミナル] タブにアップロードします (最初にクリアすることをお勧めします)。

ps: エラーが報告された場合は、エラーを修正して再試行してください

./gradlew publishAllPublicationsToSonatypeRepository

だからそれは働いた

12.バックグラウンドに移動して、リモートサーバー上のライブラリのリリースを確認します

次の URL にアクセスし、Sonatype Jira アカウントでログインします。

ps: この背景は非常に遅い、巨大なカード、ブッダ

Nexus リポジトリ マネージャー (sonatype.org)

[ステージング リポジトリ] をクリックします。

[更新] をクリックします

 ロードと再試行の長い期間の後、結果が出てきたので、それを選択し、閉じるをクリックして直接確認しました

成功したら (または表示するために数回更新します)、それを選択し、[リリース] をクリックして確認します。

成功したら、背景が完成しました。

その後、30 分以内に Maven リモート サーバーに公開され、約 4 時間で Maven 検索に表示されます。

Maven サーバーのアドレス: 中央リポジトリ: (maven.org)

ps: リンクの後に io/github/<your github name>/<your model name> と綴ると、対応するプロジェクト アドレスに直接アクセスできます。

Maven 検索アドレス:  Maven Central (sonatype.com)

13. このライブラリを初めて送信する場合は、ロボットに通知して、「ライブラリを開く」ように依頼する必要があります。

以前に登録した Web サイトを開きます。

システム ダッシュボード - Sonatype JIRA

作成した問題で、「最初のコンポーネントをリリースしました」と返信します

 ロボットが返信した後、次を使用してライブラリを使用できます。

implementation("io.github.<你的github名字>:<开源库上传的model的名字>:<版本号>")
//比如: implementation("io.github.ltttttttttttt:ComposeViews:1.3.7.4")

エピローグ

構成プロセスは臭くて時間がかかり、さまざまな参考文献に誤りがあることがわかります.この背景はさらに使いにくい.

私のプロジェクトの構成を参照できます:

lttttttttttttt/ComposeViews

最初の構成を除いて、フォローアップでは構成を完了するためにステップ 11 と 12 のみが必要です。

参考:

マルチプラットフォーム ライブラリを作成して公開する – チュートリアル | Kotlin ドキュメント (kotlinlang.org)

おすすめ

転載: blog.csdn.net/qq_33505109/article/details/129218329