1
+ // Publishing your Kotlin Multiplatform library to Maven Central
2
+ // https://dev.to/kotlin/how-to-build-and-publish-a-kotlin-multiplatform-library-going-public-4a8k
3
+
4
+ import org.gradle.api.publish.maven.MavenPublication
5
+ import org.gradle.api.tasks.bundling.Jar
6
+ import org.gradle.kotlin.dsl.`maven-publish`
7
+ import org.gradle.kotlin.dsl.signing
8
+ import java.util.*
9
+
10
+ plugins {
11
+ id(" maven-publish" )
12
+ id(" signing" )
13
+ }
14
+
15
+ // Stub secrets to let the project sync and build without the publication values set up
16
+ ext[" signing.keyId" ] = null
17
+ ext[" signing.password" ] = null
18
+ ext[" signing.secretKeyRingFile" ] = null
19
+ ext[" ossrhUsername" ] = null
20
+ ext[" ossrhPassword" ] = null
21
+
22
+ // Grabbing secrets from local.properties file or from environment variables, which could be used on CI
23
+ val secretPropsFile = project.rootProject.file(" local.properties" )
24
+ if (secretPropsFile.exists()) {
25
+ secretPropsFile.reader().use {
26
+ Properties ().apply { load(it) }
27
+ }.onEach { (name, value) ->
28
+ ext[name.toString()] = value
29
+ }
30
+ } else {
31
+ ext[" signing.keyId" ] = System .getenv(" SIGNING_KEY_ID" )
32
+ ext[" signing.password" ] = System .getenv(" SIGNING_PASSWORD" )
33
+ ext[" signing.secretKeyRingFile" ] = System .getenv(" SIGNING_SECRET_KEY_RING_FILE" )
34
+ ext[" ossrhUsername" ] = System .getenv(" OSSRH_USERNAME" )
35
+ ext[" ossrhPassword" ] = System .getenv(" OSSRH_PASSWORD" )
36
+ }
37
+
38
+ val javadocJar by tasks.registering(Jar ::class ) {
39
+ archiveClassifier.set(" javadoc" )
40
+ }
41
+
42
+ fun getExtraString (name : String ) = ext[name]?.toString()
43
+
44
+ publishing {
45
+ // Configure maven central repository
46
+ repositories {
47
+ maven(" https://oss.sonatype.org/service/local/staging/deploy/maven2/" ) {
48
+ name = " sonatype"
49
+ credentials {
50
+ username = getExtraString(" ossrhUsername" )
51
+ password = getExtraString(" ossrhPassword" )
52
+ }
53
+ }
54
+ }
55
+
56
+ // Configure all publications
57
+ publications.withType<MavenPublication > {
58
+ // Stub javadoc.jar artifact
59
+ artifact(javadocJar.get())
60
+
61
+ // Provide artifacts information requited by Maven Central
62
+ pom {
63
+ name.set(" Compose Remote" )
64
+ description.set(" Kotlin Multiplatform library" )
65
+ // url.set("") todo
66
+
67
+ licenses {
68
+ license {
69
+ name.set(" MIT" )
70
+ url.set(" https://opensource.org/licenses/MIT" )
71
+ }
72
+ }
73
+ developers {
74
+ developer {
75
+ // id.set("") todo
76
+ // name.set("") todo
77
+ // email.set("") todo
78
+ }
79
+ }
80
+ scm {
81
+ // url.set("") todo
82
+ }
83
+ }
84
+ }
85
+ }
86
+
87
+ // Signing artifacts. Signing.* extra properties values will be used
88
+ signing {
89
+ if (getExtraString(" signing.keyId" ) != null ) {
90
+ sign(publishing.publications)
91
+ }
92
+ }
93
+
94
+ // https://github.com/gradle/gradle/issues/26132
95
+ val signingTasks = tasks.withType<Sign >()
96
+ tasks.withType<AbstractPublishToMaven >().configureEach {
97
+ mustRunAfter(signingTasks)
98
+ }
0 commit comments