通过竹子将gradle项目部署到nexus

时间:2017-12-20 12:42:54

标签: gradle build.gradle nexus bamboo gradlew

我有一个带有gradle的java项目,我使用Bamboo作为我的CI / CD。 我的构建计划制作jar,我的部署计划(假设)将jar部署到nexus。我的构建工作完美,并创建工件(jar,build.gradle文件,gradle.properties文件和gradle.settings文件。

当我想运行我的部署计划时,我用竹子运行uploadArchives命令。此命令也会使jar命令运行,这会破坏我的jar(使其成为261个字节)。我找到的解决方案只是告诉gradle跳过jar命令(使用-x jar),但我觉得有更好的解决方案。

gralde中是否有特殊命令使其有效?或者有没有办法告诉gradle在没有前面的命令的情况下运行特定的命令?可能像maven命令上传第三方库?我在eveywhere搜索过但无法找到。

Thnaks!

1 个答案:

答案 0 :(得分:2)

这是Gradle的工作方式,这取决于您如何配置构建。但一般来说,您可以创建一个只发布文件的任务(它不依赖于任何内容)。您需要使用 maven-publish 插件。例如。让我们考虑以下配置

apply plugin: 'maven-publish'

group= "gradle-test"
version = "1.0-SNAPSHOT"
task produce {
  ext {
    outputFile = file("$buildDir/file.txt")
  }
  outputs.file  outputFile
  doLast {
    outputFile  << "Hello World!"
  }
}

task zipGreeting(type: Zip) {
    from produce.outputs
}

publishing {
    publications {
        newGreeting(MavenPublication) {
            artifact zipGreeting
        }
        oldGreeting(MavenPublication) {
            artifact {
              produce.outputFile
            }
        }
    }
}

使用以下配置任务publishNewGreetingPublicationToMavenLocal取决于zipGreetingproduce(因为它取决于produce的输出)所以最后Gradle会调用它们输出不是最新的(我想您的jar任务会发生这种情况 - &gt; Gradle最新检查取决于本地.gradle缓存目录)

但是publishOldGreetingPublicationToMavenLocal没有明确依赖任何其他任务,所以如果你打电话给gradle publishOldGreetingPublicationToMavenLocal。 Gradle将尝试查找提到的文件,然后将其上传到Maven Local。显然,如果文件不存在,它将失败。