Проблема загрузки проекта мультиплатформенной библиотеки Kotlin - множественные артефакты POM - PullRequest
0 голосов
/ 23 января 2019

У нас есть проект многоплатформенной библиотеки Kotlin со сценарием сборки, который собирается для различных платформ, например, JS & JVM, с использованием структуры и процессов подпроекта «старого стиля». В рамках этой системы полученные артефакты могут быть успешно загружены в репозиторий Sonatype Nexus (корень build.gradle включен ниже (1)).

Сейчас мы пытаемся перейти на мультиплатформенный подход / структуру Kotlin «нового стиля» ( Создание многоплатформенных проектов с Gradle ), но мы получаем следующую ошибку при попытке загрузить артефакты репо (модифицированный корневой build.gradle, включенный ниже (2)):

BUILD FAILED in 0s
8 actionable tasks: 1 executed, 7 up-to-date
A POM cannot have multiple artifacts with the same type and classifier. Already have MavenArtifact objjson-metadata:jar.asc:asc:null, trying to add MavenArtifact objjson-metadata:jar.asc:asc:null.
10:36:52: Task execution finished 'uploadArchives'.

Кто-нибудь знает, почему мы получаем эту ошибку?

Настройки для каждого артефакта, созданного во время сборки, похоже, нужно обновить в скрипте, но мы не уверены, как это сделать.

Заранее спасибо!

(1) Оригинальный («старый стиль» мультиплатформенный) root build.gradle:

buildscript {
    ext.kotlinVersion = '1.2.61'

    repositories {
        jcenter()
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        classpath 'com.bmuschko:gradle-nexus-plugin:2.3.1'
    }
}

plugins {
    id 'io.codearte.nexus-staging' version '0.11.0'
}

allprojects {
    group 'nz.salect.objJSON'
    version '0.24-SNAPSHOT'
}

ext {
    libraries = [
            kotlin_stdlib                 : "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion",
            kotlin_stdlib_common          : "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion",
            kotlin_stdlib_js              : "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlinVersion",

            kotlin_reflect_lib            : "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion",

            kotlin_test                   : "org.jetbrains.kotlin:kotlin-test:$kotlinVersion",
            kotlin_test_common            : "org.jetbrains.kotlin:kotlin-test-common:$kotlinVersion",
            kotlin_test_js                : "org.jetbrains.kotlin:kotlin-test-js:$kotlinVersion",
            kotlin_test_annotations_common: "org.jetbrains.kotlin:kotlin-test-annotations-common:$kotlinVersion",

            kotlin_test_junit             : "org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion",
    ]
}

subprojects {
    repositories {
        jcenter()
        mavenCentral()
    }

    //Nexus/Maven upload settings
    apply plugin: 'com.bmuschko.nexus'

    modifyPom {
        project {
            name 'objJSON'
            description 'A JSON serialization library fully implemented in Kotlin.'
            url 'https://bitbucket.org/objdict/objjson'
            inceptionYear '2016'

            scm {
                url 'https://bitbucket.org/objdict/objjson'
                connection 'scm:https://bitbucket.org/objdict/objjson.git'
                developerConnection 'scm:git://bitbucket.org/objdict/objjson.git'
            }

            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    distribution 'repo'
                }
            }

            developers {
                developer {
                    id 'xxx'
                    name 'xxx'
                    email 'xxx'
                }
            }
        }
    }

    extraArchive {
        sources = true
        tests = true
        javadoc = true
    }

    nexus {
        sign = true
        repositoryUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
        snapshotRepositoryUrl = 'https://oss.sonatype.org/content/repositories/snapshots/'
    }
    //End Nexus/Maven upload settings
}


nexusStaging {
    packageGroup = "nz.salect"
}

(2) Обновлен (мультиплатформенный "новый стиль") root build.gradle:

buildscript {
    ext.kotlinVersion = "1.3.11"

    repositories {
        jcenter()
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
    }

    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
        classpath("com.bmuschko:gradle-nexus-plugin:2.3.1")
    }
}

plugins {
    // from the multiplatform reference file
    id "kotlin-multiplatform" version "1.3.11"

    id "maven-publish"
    id "io.codearte.nexus-staging" version "0.11.0"
    //Nexus/Maven upload settings
    //id "bmuschko.nexus"
}
    //Nexus/Maven upload settings
    apply plugin: "com.bmuschko.nexus"


//ext { - all moved to buildSrc
//    libraries = [
//            kotlin_stdlib: "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion",
//            kotlin_stdlib_common: "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion",
//            kotlin_stdlib_js: "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlinVersion",
//
//            kotlin_reflect_lib: "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion",
//
//            kotlin_test: "org.jetbrains.kotlin:kotlin-test:$kotlinVersion",
//            kotlin_test_common: "org.jetbrains.kotlin:kotlin-test-common:$kotlinVersion",
//            kotlin_test_js: "org.jetbrains.kotlin:kotlin-test-js:$kotlinVersion",
//            kotlin_test_annotations_common: "org.jetbrains.kotlin:kotlin-test-annotations-common:$kotlinVersion",
//
//            kotlin_test_junit: "org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion",
//    ]
//}

allprojects {
    group "nz.salect.objJSON"
    version Share.version

    repositories {
        jcenter()
        mavenCentral()
    }

    modifyPom {
        project {
            name "objJSON"
            description "A JSON serialization library fully implemented in Kotlin."
            url "https://bitbucket.org/objdict/objjson"
            inceptionYear "2016"

            scm {
                url "https://bitbucket.org/objdict/objjson"
                connection "scm:https://bitbucket.org/objdict/objjson.git"
                developerConnection "scm:git://bitbucket.org/objdict/objjson.git"
            }

            licenses {
                license {
                    name "The Apache Software License, Version 2.0"
                    url "http://www.apache.org/licenses/LICENSE-2.0.txt"
                    distribution "repo"
                }
            }

            developers {
                developer {
                    id "xxx"
                    name "xxx"
                    email "xxx"
                }
            }
        }
    }

    extraArchive {
        sources = true
        tests = true
        javadoc = true
    }

    nexus {
        sign = true
        repositoryUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
        snapshotRepositoryUrl = "https://oss.sonatype.org/content/repositories/snapshots/"
    }
    //End Nexus/Maven upload settings
}

nexusStaging {
    packageGroup = "nz.salect"
}

repositories {
    mavenCentral()
}


kotlin {
    targets {
        fromPreset(presets.jvm, "jvm") {
            mavenPublication {
                artifactId = "objjson-jvm"
            }
        }
        fromPreset(presets.js, "js") {
            mavenPublication {
                artifactId = "objjson-js"
            }
        }
        // For ARM, preset should be changed to presets.iosArm32 or presets.iosArm64
        // For Linux, preset should be changed to e.g. presets.linuxX64
        // For MacOS, preset should be changed to e.g. presets.macosX64
        //fromPreset(presets.mingwX64, "mingw")
    }
    sourceSets {
        commonMain {
            dependencies {
                implementation("$Libraries.kotlin_stdlib_common")
                implementation("$Libraries.kotlin_reflect_lib")
            }
        }
        commonTest {
            dependencies {
                implementation("$Libraries.kotlin_test_common")
                implementation("$Libraries.kotlin_test_annotations_common")
            }
        }
        jvmMain {
            dependencies {
                implementation("$Libraries.kotlin_stdlib")
                implementation("$Libraries.kotlin_reflect_lib")
            }
        }
        jvmTest {
            dependencies {
                implementation("$Libraries.kotlin_test")
                implementation("$Libraries.kotlin_test_junit")
            }
        }
        jsMain {
            dependencies {
                implementation("$Libraries.kotlin_stdlib_js")
            }
        }
        jsTest {
            dependencies {
                implementation("$Libraries.kotlin_test_js")
            }
        }
        mingwMain {
        }
        mingwTest {
        }
    }
}
...