我有一个带有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!
答案 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
取决于zipGreeting
和produce
(因为它取决于produce
的输出)所以最后Gradle会调用它们输出不是最新的(我想您的jar
任务会发生这种情况 - &gt; Gradle最新检查取决于本地.gradle
缓存目录)
但是publishOldGreetingPublicationToMavenLocal
没有明确依赖任何其他任务,所以如果你打电话给gradle publishOldGreetingPublicationToMavenLocal
。 Gradle将尝试查找提到的文件,然后将其上传到Maven Local。显然,如果文件不存在,它将失败。