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