如何使用 Jenkins 通过 Gradle 任务将 WAR 文件发布到 Maven (Nexus) 存储库

How to publish a WAR file to maven (Nexus) repository with Jenkins via Gradle task

我正在努力通过 Gradle 任务使用 Jenkinsfile 将 war 文件部署到 Nexus 存储库。

正在成功创建 war。我在部署 JAR 方面也没有问题(因为到处都有如何部署的示例)。

所以我在 build.grade:

中有这个发布部分
publishing {
    repositories {
        maven {
            URI releasesUrl = new URI("${UploadURL}/repository/releases")
            URI snapshotsUrl = new URI("${UploadURL}/repository/snapshots")

            afterEvaluate {
                url version.endsWith("SNAPSHOT") ? snapshotsUrl : releasesUrl
            }
            credentials {
                username "${user}"
                password "${password}"
            }
        }
    }
    publications {
        mavenWeb(MavenPublication) {
            from components.web
            artifact war.archivePath
        }
    }
}

使用插件:

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'maven-publish'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'

存储库的 URL 也在构建脚本中正确指定(使用 jar 测试发布工作正常)

Jenkins 文件:

stage ('Publish war') {
    steps {
        sh "sh gradlew publish"
    }
}

目前我从 jenkins 构建中收到此错误:

Task :publishMavenWebPublicationToMavenRepository FAILED

FAILURE: Build failed with an exception.

What went wrong: Execution failed for task ':publishMavenWebPublicationToMavenRepository'. Failed to publish publication 'mavenWeb' to repository 'maven' Invalid publication 'mavenWeb': multiple artifacts with the identical extension and classifier ('war', 'null').

我很确定问题出在 Gradle 任务的 "publications" 部分。 为了发布 Jar,我一直这样使用它:

[...]
publications {
    mavenJava(MavenPublication) {
        from components.java
        artifact sourceJar
    }
}
[...]


task sourceJar(type: Jar) {
    classifier 'sources'
    from sourceSets.main.java
}

我不知道如何为此任务配置 fromartifactclassifier。我什至不知道是否应该配置所有这些参数...有人可以帮我吗?

原来问题出在这一段:

afterEvaluate {
    url version.endsWith("SNAPSHOT") ? snapshotsUrl : releasesUrl
} 

此功能适用于 Gradle 5.X 版本,但是,我使用的是 Gradle 4.8. 这导致 null 而不是 propper url值... 不幸的是,这花了一段时间,因为异常消息没有提示问题出在哪里。