Gradle:maven存储库上的条件基础发布包

时间:2018-05-10 09:49:11

标签: java maven gradle build.gradle

我有一个gradle文件,用于构建JAR并将其发布到nexus服务器上的maven存储库中。

build.gradle

publishing {
    publications {
        maven(MavenPublication) {
            artifact shadowJar
        }
    }
    repositories {
        maven {
            credentials {
                username nexusUsername
                password nexusPassword
            }
            if (IsSnapshot.toBoolean())
                url "${nexusUrl}/repository/maven-snapshots/"
            else
                url "${nexusUrl}/repository/maven-releases/"
        }
    }
}

此任务根据IsSnapshot的值将JAR文件发布到相应的存储库(快照/版本)。

我还有一个变量:DoPublish。如果DoPublishtrue,那么我想要发布包;否则,我不想在nexus上发布这个软件包。

我想我应该在这种情况下将url设置为空字符串。还有更好的建议吗?

gradle任务的输出

  

发布任务

     

generatePomFileFor {module1} Publication - 生成用于发布的Maven POM文件' module1'。

     

generatePomFileFor {module2} Publication - 生成用于发布的Maven POM文件' module2'。

     

generatePomFileForMavenPublication - 生成Maven POM文件以供发布' maven'。

     

发布 - 发布此项目生成的所有出版物。

     

发布{module1} PublicationToMavenLocal - 发布Maven出版物' module1'到本地Maven存储库。

     

发布{module1} PublicationToMavenRepository - 发布Maven出版物' module1'到Maven存储库' maven'。

     

发布{module2} PublicationToMavenLocal - 发布Maven出版物' module2'到本地Maven存储库。

     

发布{module2} PublicationToMavenRepository - 发布Maven出版物' module2'到Maven存储库' maven'。

     

publishMavenPublicationToMavenLocal - 发布Maven出版物' maven'到本地Maven存储库。

     

publishMavenPublicationToMavenRepository - 发布Maven出版物' maven'到Maven存储库' maven'。

     

publishToMavenLocal - 将此项目生成的所有Maven出版物发布到本地Maven缓存。

1 个答案:

答案 0 :(得分:3)

可以使用onlyIf有条件地停用任务,如gradle文档中所述:https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:using_a_predicate

这里讨论的任务是publishMavenJavaPublicationToMavenRepository,如https://docs.gradle.org/current/userguide/publishing_maven.html所述,这是需要禁用的任务:

publishMavenJavaPublicationToMavenRepository.onlyIf { IsSnapshot.toBoolean() }

因为任务publishMavenJavaPublicationToMavenRepository是在成功发布配置时动态生成的,所以在解析和评估构建脚本时会导致异常,因此它可能不可用。在这种情况下,可以在完成任务gragh后更新它:

gradle.taskGraph.whenReady { graph -> 
  publishMavenJavaPublicationToMavenRepository.onlyIf { IsSnapshot.toBoolean() }
}

如果你使用不同的发布插件,它可能是一个不同的任务,但想法是相同的