Как развернуть артефакт моментального снимка в хранилище Maven и создать действительный файл maven-metadata.xml с помощью Gradle?

У меня есть следующее build.gradle сценарий:

apply plugin: 'java'
apply plugin: 'maven'

compileJava {
    targetCompatibility = "1.8"
    sourceCompatibility = "1.8"
    options.encoding = 'UTF-8'
}

ext.username = System.getProperty('username') != null ? System.getProperty('username') : mavenUser
ext.password = System.getProperty('password') != null ? System.getProperty('password') : mavenPassword

description = "Example project that shows how to use Gradle to build and deploy artifacts to Nexus"

configurations {
    deployerJars
}

repositories {
    maven { url "http://nexus:8081/nexus/content/groups/my-group/" }
    mavenCentral()
}

dependencies {
    deployerJars "org.apache.maven.wagon:wagon-http:2.2"
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

// Gradle build Configuration to publish artifacts to maven artifact manager
uploadArchives {
    repositories.mavenDeployer {
            configuration = configurations.deployerJars
            repository(url: "http://nexus:8081/nexus/content/repositories/my-snapshots/") {
                authentication(userName: username, password: password)
            }
            pom.groupId = "com.foo.bar"
            pom.artifactId = "my-gradle-app"
            pom.version = "1.0-SNAPSHOT"
    }
}

// ------------------------------------------------------
// EXAMPLE: custom tasks for creating source/javadoc jars
task sourcesJar(type: Jar, dependsOn: classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

// add javadoc/source jar tasks as artifacts
artifacts {
    archives sourcesJar
    archives javadocJar
}

Когда я выполняю следующее, сборка и развертывание завершаются успешно:

$ gradle clean upload -Dusername=myUsername -Dpassword=myPassword

Произведенный maven-metadata.xml файл выглядит так:

<metadata>
    <groupId>com.foo.bar</groupId>
    <artifactId>my-gradle-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <versioning>
        <snapshot>
            <timestamp>20170906.143113</timestamp>
            <buildNumber>1</buildNumber>
        </snapshot>
        <lastUpdated>20170906143113</lastUpdated>
    </versioning>
</metadata>

Это файлы, которые фактически были развернуты в Nexus:

my-gradle-app-1.0-20170906.143113-1-javadoc.jar
my-gradle-app-1.0-20170906.143113-1-javadoc.jar.md5
my-gradle-app-1.0-20170906.143113-1-javadoc.jar.sha1
my-gradle-app-1.0-20170906.143113-1-sources.jar
my-gradle-app-1.0-20170906.143113-1-sources.jar.md5
my-gradle-app-1.0-20170906.143113-1-sources.jar.sha1
my-gradle-app-1.0-20170906.143113-1.jar
my-gradle-app-1.0-20170906.143113-1.jar.md5
my-gradle-app-1.0-20170906.143113-1.jar.sha1
my-gradle-app-1.0-20170906.143113-1.pom
my-gradle-app-1.0-20170906.143113-1.pom.md5
my-gradle-app-1.0-20170906.143113-1.pom.sha1

Исходя из опыта Maven, я ожидаю увидеть следующее в maven-metadata.xml файл:

<metadata>
    <groupId>com.foo.bar</groupId>
    <artifactId>my-gradle-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <versioning>
        <snapshot>
            <timestamp>20170906.143113</timestamp>
            <buildNumber>1</buildNumber>
        </snapshot>
        <lastUpdated>20170906143113</lastUpdated>
    </versioning>
    <snapshotVersions>
        <snapshotVersion>
            <classifier>javadoc</classifier>
            <extension>jar</extension>
            <value>1.0-20170906.143113-1</value>
            <updated>20170906140847</updated>
        </snapshotVersion>
        <snapshotVersion>
            <classifier>sources</classifier>
            <extension>jar</extension>
            <value>1.0-20170906.143113-1</value>
            <updated>20170906140847</updated>
        </snapshotVersion>
        <snapshotVersion>
            <extension>jar</extension>
            <value>1.0-20170906.143113-1</value>
            <updated>20170906140844</updated>
        </snapshotVersion>
        <snapshotVersion>
            <extension>pom</extension>
            <value>1.0-20170906.143113-1</value>
            <updated>20170906140847</updated>
        </snapshotVersion>
    </snapshotVersions>
</metadata>

Если я перезапущу развертывание, я буду ожидать maven-metadata.xml файл не только иметь <snapshot/>"s <timestamp/> а также <buildNumber> быть обновленным, но и получить новое <snapshotVersion/> Записи добавлены. Вместо этого происходит то, что весь файл регенерируется, и есть только один <snapshotVersion/> и только <snapshot/>"s <timestamp/> а также <buildNumber> правильно обновлены.

Что мне здесь не хватает? Почему не maven-metadata.xml производится правильно? Есть ли плагин, который мне не хватает? Это ошибка в Gradle?

Кроме того, я поднял проблему #2882 в системе отслеживания проблем Gradle, чтобы выяснить, является ли это ошибкой, неполной функцией или неправильной конфигурацией с нашей стороны.

Я также попробовал maven-publish плагин, но производится maven-metadata.xml файл все тот же.

0 ответов

Другие вопросы по тегам