/* * Copyright 2019-2020 Mamoe Technologies and contributors. * * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. * * https://github.com/mamoe/mirai/blob/master/LICENSE */ // 部分源码来自 kotlinx.coroutines // Source code from kotlinx.coroutines tasks.register("ensureBintrayAvailable") { doLast { if (!upload.Bintray.isBintrayAvailable(project)) { throw new IllegalStateException("bintray isn't available. ") } } } def vcs = "https://github.com/mamoe/mirai" def pomConfig = { licenses { license { name "AGPLv3 with Mamoe Exceptions" url "https://github.com/mamoe/mirai/blob/master/LICENSE" distribution "repo" } } developers { developer { id "mamoe" name "Mamoe Technologies" email "support@mamoe.net" } } scm { url vcs } } project.ext.configureMavenCentralMetadata = { pom -> def root = asNode() root.appendNode('name', project.name) root.appendNode('description', project.description) root.appendNode('url', vcs) root.children().last() + pomConfig } try { // empty xxx-javadoc.jar task javadocJar(type: Jar) { archiveClassifier = 'javadoc' } } catch (Exception ignored) { } try { task stubJavadoc(type: Jar) { archiveClassifier = 'javadoc' } } catch (Exception ignored) { } /** * Publish the platform JAR and POM so that consumers who depend on this module and can't read Gradle module * metadata can still get the platform artifact and transitive dependencies from the POM * (see details in https://youtrack.jetbrains.com/issue/KT-39184#focus=streamItem-27-4115233.0-0) */ project.ext.publishPlatformArtifactsInRootModule = { platformPublication -> afterEvaluate { def platformPomBuilder = null platformPublication.pom.withXml { platformPomBuilder = asString() } publishing.publications.kotlinMultiplatform { platformPublication.artifacts.forEach { artifact(it) } pom.withXml { def pomStringBuilder = asString() pomStringBuilder.setLength(0) // The platform POM needs its artifact ID replaced with the artifact ID of the root module: def platformPomString = platformPomBuilder.toString() platformPomString.eachLine { line -> if (!line.contains("<!--")) { // Remove the Gradle module metadata marker as it will be added anew pomStringBuilder.append(line.replace(platformPublication.artifactId, artifactId)) pomStringBuilder.append("\n") } } } } tasks.matching { it.name == "generatePomFileForKotlinMultiplatformPublication" }.configureEach { dependsOn(tasks["generatePomFileFor${platformPublication.name.capitalize()}Publication"]) } } } def isKotlin137x = false afterEvaluate { publishing { def variantName = "${project.name}" // Rename artifacts for backward compatibility publications.all { def type = it.name logger.info("Configuring $type") switch (type) { case 'kotlinMultiplatform': if (isKotlin137x) { it.artifactId = "$variantName-native" it.artifact sourcesJar } else { // With Kotlin 1.4.0, the root module ID has no suffix, but for compatibility with // the consumers who can't read Gradle module metadata, we publish the JVM artifacts in it it.artifactId = variantName publishPlatformArtifactsInRootModule(publications["jvm"]) } break case 'metadata': it.artifactId = isKotlin137x ? "$variantName-common" : "$variantName-metadata" break case 'jvm': it.artifactId = isKotlin137x ? "$variantName" : "$variantName-jvm" /* def files = tasks.getByName("shadowJarMd5").outputs.files + tasks.getByName("shadowJvmJar").outputs.files for (f in files) { artifact f } */ break case 'js': it.artifactId = "$variantName-$type" break } logger.info("Artifact id = ${it.artifactId}") pom.withXml(configureMavenCentralMetadata) // The 'root' module publishes the JVM module's Javadoc JAR as per publishPlatformArtifactsInRootModule, and if (name != "kotlinMultiplatform") artifact stubJavadoc } if (isKotlin137x) { disableMetadataPublication() } } } if (upload.Bintray.isBintrayAvailable(project)) { apply from: rootProject.file("gradle/bintray.gradle") } /* task bintrayUpload(dependsOn: publish) // This is required for K/N publishing bintrayUpload.dependsOn publishToMavenLocal bintrayUpload.dependsOn generatePomFileForKotlinMultiplatformPublication */