| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- /*
- * 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 "[email protected]"
- }
- }
- 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
- */
|