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:
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:
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)