Use MavenCentral para publicar dependencias remotas de bibliotecas multiplataforma de Kotlin (KMM, KMP)

prefacio

Los desarrolladores pueden crear su propia biblioteca de código abierto, como solía hacer solo en una plataforma única, como la plataforma Android o JVM, en este momento, solo use jitpack directamente, y es muy fácil liberar dependencias remotas

referencia de jitpack:

La experiencia de pisar el foso de la publicación de librerías de código abierto: jitpack.io_Blog de Li Xiaobai

Ahora Kotlin puede implementar proyectos nativos multiplataforma (o bibliotecas) a través de expect. En este momento, hemos desarrollado una biblioteca multiplataforma que se puede publicar usando MavenCentral

esperar referencia:

Varias formas de declarar KMM Kotlin expect_Li Xiaobai's Blog

texto

A continuación, echemos un vistazo a cómo publicar bibliotecas multiplataforma de Kotlin

1. Primero, puede crear una biblioteca multiplataforma, puede consultar:

KMM+Compose desarrolla una aplicación multiplataforma de Kotlin_kotlin kmm_Li Xiaobai's Blog

Crear y publicar una biblioteca multiplataforma: tutorial | Documentación de Kotlin (kotlinlang.org)

2. Registre una cuenta de Sonatype Jira (si esta es la primera operación, comience desde este paso; de lo contrario, comience desde el paso 11)

Regístrate en Jira - Sonatype JIRA

Ingrese al enlace anterior y luego complete la información para registrarse, una vez que se complete el registro, debe usar el nombre de usuario y la contraseña

3. Crea preguntas (¡sí!)

Después de un registro exitoso, generalmente saltará a esta página, puede hacer clic en esta ubicación para crear una pregunta

Luego rellena así:

4. Verificar la propiedad del ID de grupo

Después de enviar las preguntas anteriores, un robot responderá a su mensaje de la siguiente manera:

Te permite crear un repositorio público de Github llamado OSSRH-XXX que publicó

Después de usar su Github para crear, cambie el estado para abrir aquí, generalmente la primera línea después del menú desplegable (lo hice aquí) 

 Después de configurar el estado, verá el mensaje del robot en un momento

5. Generar una clave

A continuación, debe usar GPG para generar la clave

Windows puede usar el siguiente enlace para descargar e instalar, y otros sistemas pueden encontrarlo por sí mismos:

Gpg4win - Cifrado seguro de archivos y correo electrónico con GnuPG para Windows

Simplemente vaya al siguiente paso para instalar

Luego abra la línea de comando cmd e ingrese:

gpg --full-gen-key

Luego, le pedirá que ingrese información diversa (si solicita y/n en el medio, ingrese y):

Tipo de clave RSA 

tamaño de llave 4096

Tiempo de caducidad 0 (lo que significa que nunca caducará)

Nombre

Correo electrónico (uso posterior)

Los comentarios se pueden dejar en blanco

 Contraseña (para uso posterior)

6. Obtener información clave

Verifique que los pasos anteriores fueron exitosos ingresando el comando:

gpg --list-keys

Si obtiene esta información, tendrá éxito.

Los últimos ocho dígitos seleccionados en el cuadro rojo (ID de llave) deben usarse más tarde, que es la huella digital de la llave

 Luego sube tu clave pública al servidor

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

 Luego guarde la clave privada localmente con el siguiente comando, que debe usarse más adelante

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

El nombre de archivo general usa secring.gpg

pd: linux o macos pueden necesitar usar el siguiente comando (no puedo usarlo en mi ventana de todos modos)

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

7. Configure el complemento de script precompilado de Gradle

Primero cree un modelo en su proyecto, llamado convenio-complementos

Luego cree un directorio de la siguiente manera, puede consultar la configuración de mi proyecto ( ComposeViews ):

pd: hay que prestar atención a la ubicación del directorio

Escriba el siguiente código en build.gradle.kts en el modelo:

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
}

Escriba el siguiente código en el archivo convencion.publicacion.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. Parámetros de configuración

Copie el archivo de clave privada secring.gpg en el directorio raíz del proyecto

Agregue la siguiente configuración al archivo local.properties en el directorio raíz del proyecto:

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

Luego configure estos dos archivos para que no se carguen en el archivo .gitignore

secring.gpg
local.properties

9. Use el complemento de script precompilado de Gradle

Configure en el archivo settings.gradle.kts en el directorio raíz del proyecto:

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

Configure en build.gradle.kts en el modelo que necesita publicar:

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

Luego sincroniza gradle

pd: el nombre del modelo que desea publicar se convertirá más tarde en el nombre de su proyecto dependiente remoto, por ejemplo: mi modelo:

El nombre del modelo seleccionado en el cuadro rojo era croe, pero la dirección de dependencia que me generó fue esta: io.github.ltttttttttttt:core:xxx

10. Publicar configuración de destino

En el build.gradle.kts del modelo que necesita publicar, además de configurar el siguiente complemento, también necesita configurar más:

id("convention.publication")

Configure su ID de grupo y número de versión:

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

pd: si ha enviado paquetes con jitpack anteriormente, el número de versión que escriba más tarde debe ser mayor que jitpack, porque la misma versión entrará en conflicto después de la prueba 

Configura tu objetivo multiplataforma de Kotlin

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

Captura de pantalla a continuación:

11. Cargue el producto del proyecto en el servidor remoto

Después de depurar sin informar un error, use el siguiente comando para cargar en la pestaña Terminal (es mejor borrarlo por primera vez)

pd: si se informa un error, corríjalo e intente nuevamente

./gradlew publishAllPublicationsToSonatypeRepository

así que funcionó

12. Vaya al fondo para confirmar el lanzamiento de la biblioteca en el servidor remoto

Visite la siguiente URL e inicie sesión con su cuenta de Sonatype Jira:

pd: este fondo es extremadamente lento, tarjeta enorme, buda

Administrador de repositorios de Nexus (sonatype.org)

Haga clic en Repositorios provisionales

Haga clic en Actualizar

 Después de un largo período de carga y reintento, salió el resultado, lo seleccionamos y luego hicimos clic en cerrar para confirmarlo directamente

Después del éxito (o actualizar varias veces para ver), lo seleccionamos, luego hacemos clic en liberar, solo confirme

Después del éxito, el fondo está terminado.

Luego, se puede publicar en el servidor remoto de Maven en media hora y se puede encontrar en la búsqueda de Maven en aproximadamente 4 horas.

Dirección del servidor Maven:  Repositorio central: (maven.org)

pd: después del enlace, puede escribir io/github/<su nombre de github>/<nombre de su modelo> para acceder directamente a la dirección del proyecto correspondiente

Dirección de búsqueda de Maven:  Maven Central (sonatype.com)

13. Si envía esta biblioteca por primera vez, debe notificar al robot y pedirle que "abra la biblioteca" por usted

Abra el sitio web previamente registrado:

Panel del sistema - Sonatype JIRA

En el problema que creó, responda con "Lancé el primer componente"

 Después de que el robot le responda, su biblioteca se puede usar usando:

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

epílogo

Se puede encontrar que el proceso de configuración es maloliente y largo, y hay errores en varios documentos de referencia.Este fondo es aún más difícil de usar.

Puede consultar la configuración de mi proyecto:

lttttttttttttt/ComposeViews

A excepción de la primera configuración, el seguimiento solo necesita los pasos 11 y 12 para completar la configuración

referencia:

Crear y publicar una biblioteca multiplataforma: tutorial | Documentación de Kotlin (kotlinlang.org)

Supongo que te gusta

Origin blog.csdn.net/qq_33505109/article/details/129218329
Recomendado
Clasificación