Kotlin Multiplatform 라이브러리를 Maven Central에 게시
18312 단어 multiplatformkotlin
Sonatype 계정 등록
만약 이것이 첫 번째 라이브러리이거나, 이전에 Bintray만 사용해서 이 작업을 완성한 적이 있다면, 먼저 Sonatype 계정을 등록해야 합니다.
인터넷에는 많은 글들이 등록 과정을 묘사하였다.The one from GetStream는 상세하고 최신이다."GPG 키 쌍 생성"을 비롯하여 다음 네 가지 단계를 시작할 수 있습니다.
게시 작성
지금 우리는Gradle에게 우리의 라이브러리를 어떻게 발표하는지 알려줘야 한다.대부분의 작업은 maven-publish
과 Kotlin Gradle 플러그인으로 이루어졌습니다. 필요한 모든 출판물은 자동으로 만들어집니다.라이브러리를 로컬 Maven 저장소에 게시할 때 결과가 표시됩니다.하지만 Maven Central에 게시하려면 몇 가지 추가 절차가 필요합니다.
javadocs
을 제공합니다.가장 익숙하고 유연한 방법은 사용Gradle’s precompiled script plugins이다.빌드 논리는 사전 컴파일 스크립트 플러그인으로 제공되며 플러그인 ID를 통해 라이브러리의 각 모듈에 적용될 수 있습니다.
이를 위해서는 발표 논리를 개별적인Gradle 프로젝트에 두어야 합니다.
convention-plugins
중에convention-plugins
가 있다.다음을
build.gradle.kts
에 넣습니다.plugins {
`kotlin-dsl` // Is needed to turn our build logic written in Kotlin into Gralde Plugin
}
repositories {
gradlePluginPortal() // To use 'maven-publish' and 'signing' plugins in our own plugin
}
build.gradle.kts
디렉터리에 convention.publication.gradle.kts
파일을 만듭니다.이것은 모든 발표 논리를 저장하는 곳이다.필요한 모든 논리를 거기에 두어라.애플리케이션
convention-plugins/src/main/kotlin
만으로도 로컬 Maven 저장소에 게시할 수 있지만 Maven Central에는 게시할 수 없습니다.제공된 스크립트에서는 maven-publish
또는 환경 변수에서 자격 증명을 얻어 게시 섹션에서 필요한 모든 구성을 수행하고 서명 플러그인을 사용하여 출판물에 서명합니다.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("MPP Sample library")
description.set("Sample Kotlin Multiplatform library (jvm + ios + js) test")
url.set("https://github.com/KaterinaPetrova/mpp-sample-lib")
licenses {
license {
name.set("MIT")
url.set("https://opensource.org/licenses/MIT")
}
}
developers {
developer {
id.set("KaterinaPetrova")
name.set("Ekaterina Petrova")
email.set("[email protected]")
}
}
scm {
url.set("https://github.com/KaterinaPetrova/mpp-sample-lib")
}
}
}
}
// Signing artifacts. Signing.* extra properties values will be used
signing {
sign(publishing.publications)
}
너의 도서관 프로젝트로 돌아가라.Gradle을 사용하여 루트 디렉토리
local.properties
에 다음 내용을 추가하여 플러그인을 미리 구성합니다.includeBuild("convention-plugins")
현재 우리는 우리의 라이브러리
settings.gradle
에서 이 논리를 응용할 수 있다.build.script
부분에서 사용plugins
을 저희maven-publish
로 바꿉니다.plugins {
kotlin("multiplatform") version "1.4.30"
id("convention.publication")
}
필요한 모든 자격 증명을 포함하는
conventional.publication
파일을 만들고 에 추가했는지 확인하는 것을 잊지 마십시오.gitignore🗝:signing.keyId=...
signing.password=...
signing.secretKeyRingFile=...
ossrhUsername=...
ossrhPassword=...
local.properties
및 동기화 프로젝트.Sonatype 저장소와 관련된 새Gradle 작업이 발표 그룹에 나타날 것입니다. 이것은 라이브러리를 발표할 수 있음을 의미합니다.
Maven Central에 첫 번째 라이브러리 게시
이 글의 첫머리에서, 나는 너에게 네가 클릭만 하면 너의 도서관을 발표할 수 있다는 것을 보증한다. 지금이 중요한 때이다.Sonatype 저장소에 라이브러리를 업로드하려면 다음과 같이 하십시오.
./gradlew publishAllPublicationsToSonatypeRepository
이른바 임시 저장소를 만들고 모든 출판물의 모든 부품을 이 저장소에 업로드합니다.지금 해야 할 일은 업로드하고 싶은 모든 작업이 거기에 있는지 확인하고 '방출' 단추를 누르는 것입니다.
이 마지막 절차는 the now-familiar article에 상세하게 설명되어 있다.요컨대, 당신은 다음과 같은 것을 필요로 한다.
./gradlew publishAllPublicationsToSonatypeRepository
https://s01.oss.sonatype.org/
곧 라이브러리는 에서 사용할 수 있고 다른 개발자들은 의존항으로 추가할 수 있습니다.몇 시간만 지나면 https://repo1.maven.org/maven2/!
discoverable in Maven Central Repository Search
결론
축하합니다!🎉 첫 번째 Kotlin 멀티플랫폼 라이브러리를 만들고 Maven Central에 발표했습니다!
이제 릴리즈된 버전에 의존할 수 있는 방법은 다음과 같습니다.
kotlin {
android()
ios ()
sourceSets {
val commonMain by getting {
dependencies {
implementation("io.github.katerinapetrova:mpp-sample-lib:1.0.0")
}
}
}
아주 간단하죠?'외부 의존 항목' 부분을 보면, 프로젝트가 매번 모든 부품을 다운로드하는 것이 아니라 실제 목표 플랫폼의 부품만 다운로드하는 것을 발견할 수 있습니다.Gradle 모듈 메타데이터 기능 때문에 공유 원본에서 라이브러리에 대한 의존 관계를 한 번만 지정하면 됩니다. 설령 그것이 플랫폼 원본에서 집중적으로 사용되더라도.
이미 많은 일을 했지만, 물론 이것은 여정의 시작일 뿐이다.다음으로 가장 흥미로운 부분은 라이브러리를 계속 지원하고 개선하는 것입니다. 그러면 사용자에게 가장 좋은 DX를 제공하고 다른 라이브러리 창설자와 공헌자와 함께 KMM 생태계를 발전시킬 수 있습니다.
다음 단계에 유용한 절차
kotlin {
android()
ios ()
sourceSets {
val commonMain by getting {
dependencies {
implementation("io.github.katerinapetrova:mpp-sample-lib:1.0.0")
}
}
}
게시 프로세스를 자동화하려면 / 카트리나 페트로바
예제 Kotlin 멀티플랫폼 라이브러리(jvm+ios+js)
Reference
이 문제에 관하여(Kotlin Multiplatform 라이브러리를 Maven Central에 게시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kotlin/how-to-build-and-publish-a-kotlin-multiplatform-library-going-public-4a8k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)