xref: /aosp_15_r20/external/kotlinx.serialization/gradle/publishing.gradle (revision 57b5a4a64c534cf7f27ac9427ceab07f3d8ed3d8)
1/*
2 * Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3 */
4
5// Configures publishing of Maven artifacts to MavenCentral
6
7apply plugin: 'maven-publish'
8apply plugin: 'signing'
9
10apply from: project.rootProject.file('gradle/maven-metadata.gradle')
11
12def isMultiplatform = project.name in ["kotlinx-serialization-core", "kotlinx-serialization-json", "kotlinx-serialization-json-okio",
13                                       "kotlinx-serialization-json-tests", "kotlinx-serialization-protobuf", "kotlinx-serialization-cbor",
14                                       "kotlinx-serialization-properties"]
15def isBom = project.name == "kotlinx-serialization-bom"
16
17if (!isBom) {
18    task stubSources(type: Jar) {
19        archiveClassifier = 'sources'
20    }
21
22    task stubJavadoc(type: Jar) {
23        archiveClassifier = 'javadoc'
24    }
25}
26
27task emptyJar(type: Jar) {
28}
29
30afterEvaluate {
31    task mainSourcesJar(type: Jar) {
32        classifier = 'sources'
33        if (isMultiplatform) {
34            from kotlin.sourceSets.commonMain.kotlin
35        } else if (isBom) {
36            // no-op: sourceSets is [] for BOM, as it does not have sources.
37        } else {
38            from sourceSets.main.allSource
39        }
40    }
41}
42
43afterEvaluate {
44    publishing {
45        def variantName = "${project.name}"
46
47        if (!isMultiplatform && !isBom) {
48            publications {
49                maven(MavenPublication) { publication ->
50                    artifactId variantName
51                    publication.from components.java
52                    publication.artifact mainSourcesJar
53                    artifact stubJavadoc
54
55                    PublishingKt.configureMavenCentralMetadata(publication.pom, project)
56                    PublishingKt.signPublicationIfKeyPresent(project, publication)
57                }
58            }
59
60            return
61        }
62
63        // Rename artifacts for backward compatibility
64        publications.all {
65            def type = it.name
66            logger.info("Configuring $type")
67            switch (type) {
68                case 'kotlinMultiplatform':
69                        // With Kotlin 1.4.0, the root module ID has no suffix, but for compatibility with
70                        // the consumers who can't read Gradle module metadata, we publish the JVM artifacts in it
71                    it.artifactId = variantName
72                    apply from: "$rootDir/gradle/publish-mpp-root-module-in-platform.gradle"
73                    publishPlatformArtifactsInRootModule(publications["jvm"])
74                    break
75                case 'metadata':
76                case 'jvm':
77                case 'js':
78                    it.artifactId = "$variantName-$type"
79                    break
80            }
81            logger.info("Artifact id = ${it.artifactId}")
82
83            PublishingKt.configureMavenCentralMetadata(pom, project)
84            PublishingKt.signPublicationIfKeyPresent(project, it)
85
86            // The 'root' module publishes the JVM module's Javadoc JAR as per publishPlatformArtifactsInRootModule, and
87            // every other module should publish an empty Javadoc JAR. TODO: provide proper documentation artifacts?
88            if (name != "kotlinMultiplatform" && !isBom) {
89                artifact stubJavadoc
90            }
91        }
92    }
93}
94
95publishing {
96    repositories {
97        PublishingKt.configureMavenPublication(delegate, project)
98    }
99}
100
101// Compatibility with old TeamCity configurations that perform :kotlinx-coroutines-core:bintrayUpload
102task bintrayUpload(dependsOn: publish)
103
104// This is required for K/N publishing
105bintrayUpload.dependsOn publishToMavenLocal
106
107