Gradle:Maven存储库上的条件库发布程序包

Kru*_*upa 4 java gradle maven 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/"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此任务基于的值将JAR文件发布到相应的存储库(快照/发行版)IsSnapshot

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

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

Gradle任务的输出

发布任务

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

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

generatePomFileForMavenPublication-为发布“ maven”生成Maven POM文件。

出版-出版该项目制作的所有出版物。

publish {module1} PublicationToMavenLocal-将Maven发布'module1'发布到本地Maven存储库。

publish {module1} PublicationToMavenRepository-将Maven发布'module1'发布到Maven存储库'maven'。

publish {module2} PublicationToMavenLocal-将Maven发布'module2'发布到本地Maven存储库。

publish {module2} PublicationToMavenRepository-将Maven发布'module2'发布到Maven存储库'maven'。

publishMavenPublicationToMavenLocal-将Maven发布'maven'发布到本地Maven存储库。

publishMavenPublicationToMavenRepository-将Maven出版物“ maven”发布到Maven仓库“ maven”。

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

Ole*_*yar 5

可以使用onlyIfgradle文档中所述的方法有条件地停用任务: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() }
Run Code Online (Sandbox Code Playgroud)

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

gradle.taskGraph.whenReady { graph -> 
  publishMavenJavaPublicationToMavenRepository.onlyIf { IsSnapshot.toBoolean() }
}
Run Code Online (Sandbox Code Playgroud)

如果您使用其他发布插件,则可能是不同的任务,但想法是相同的