将自定义任务的执行限制为执行bootBuildImage



我已经厌倦了手动增加我在项目中构建的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,你的代码也可能被执行。

您可能想要做的是将其移动到任务操作中。为此,只需将其封装在doFirstdoLast方法中:

// 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

最新更新