序文
開発者は独自のオープン ソース ライブラリを作成することができます。以前は 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 サイトを開きます。
作成した問題で、「最初のコンポーネントをリリースしました」と返信します
ロボットが返信した後、次を使用してライブラリを使用できます。
implementation("io.github.<你的github名字>:<开源库上传的model的名字>:<版本号>")
//比如: implementation("io.github.ltttttttttttt:ComposeViews:1.3.7.4")
エピローグ
構成プロセスは臭くて時間がかかり、さまざまな参考文献に誤りがあることがわかります.この背景はさらに使いにくい.
私のプロジェクトの構成を参照できます:
最初の構成を除いて、フォローアップでは構成を完了するためにステップ 11 と 12 のみが必要です。
参考:
マルチプラットフォーム ライブラリを作成して公開する – チュートリアル | Kotlin ドキュメント (kotlinlang.org)