我已经厌倦了手动增加我在项目中构建的docker映像的版本号。因此,我编写了一个小脚本,它为我完成了这项任务,它看起来像这样:
group = 'XXXXXXXXX'
version = '1.0.1'
sourceCompatibility = '1.8'
task incrementVersion {
def v = version
String minor=v.substring(v.lastIndexOf('.')+1) //get last digit
int m=minor.toInteger()+1 //increment
String major=v.substring(0,v.lastIndexOf(".")) //get the beginning
String s=buildFile.getText().replaceFirst("version = '$version'","version = '"+major+ "." +m+"'")
buildFile.setText(s) //replace the build file's text
}
它确实工作得很好,并增加版本号,但不仅仅是当我告诉gradle到bootBuildImage
时。我正在使用IntelliJ,似乎IntelliJ检查构建。Gradle并检查它以确保更改是正确的,没有损坏。然而,这也触发了我的增量任务,再次修改文件,并重新触发检查…你知道这是怎么回事了。
我现在得到一个不断增加的版本号,每次IntelliJ试图断言一个好的构建。gradle文件。现在我需要确保,我的自定义任务incrementversion只有当我触发bootBuildImage任务时才会执行。
如果这不容易,我也可以禁用IntelliJ的自动检查。
任务主要由一些配置和一些操作组成。任务配置可以发生,即使它不打算被执行。但是,操作只在任务执行期间运行。
当你把代码直接放在给任务的闭包中时,它是用来配置任务的。所以即使你只输入gradlew help
,你的代码也可能被执行。
您可能想要做的是将其移动到任务操作中。为此,只需将其封装在doFirst
或doLast
方法中:
// Groovy DSL
task incrementVersion {
doFirst {
// Your code here
}
}
// Or better yet (using lazy APIs):
tasks.register("incrementVersion") {
doFirst {
// Your code here
}
}
bootBuildImage.dependsOn("incrementVersion") // Assuming you have something like this as well