使用gradle / groovy任务将变量值替换为不同文件中的新更改/增量值?

时间:2017-12-02 15:35:33

标签: java gradle groovy

我正在尝试使用gradle / groovy替换我的version.gradle文件中的特定变量值,该文件包含许多具有new / incremneted值的其他变量

以下是我的version.gradle文件,格式如下

ext {
  def planName = System.env.bamboo_buildPlanName
  //println planName
  crversion="1.1.1.49"
  if (planName != null && project.hasProperty('abc')) {
    cAVersion = "${crversion}.${System.env.bamboo_buildNumber}"
    //println clVersion
    } else if (project.hasProperty("def")){
    cAVersion = "${crversion}"}
    else if (project.hasProperty("ghf")){
    cAVersion = "${crversion}"
    }else {
    cAVersion = ""
    }   
  ghkVersion = project.findProperty("abcVersion") ?: '1.0.8.66-SNAPSHOT'
  lkeVersion = '1.8.0.144.0'
  nccVersion = '1.2.7.30-SNAPSHOT'
}

下面是我的代码,我试图用它来增加/改变crversion的值1.1.1.49 ----> 1.1.1.50所以每次增加+1最后一个数字(49-50等等),然后用新值替换crversion变量的值

apply from: "${rootDir}/version.gradle"

task incrementrevsion{
    def file = new File('version.gradle')
    def v = crversion
    println v
    String minor=v.substring(v.lastIndexOf('.')+1) //get last digit
    int m=minor.toInteger()+1                      //increment
    println m
    String major=v.substring(0,v.lastIndexOf("."));       //get the beginning without period(.)
    println major
    String s=file.text.replace("crversion='$crversion '","crversion='"+major+ "." +m+"'")
    println s
    file.setText(s) //replace the build file's text
}

之后我将使用另外两个gradle任务,它将提交文件并将其推送到版本控制。

1)我能够在其他文件中成功更新/增加值,但是如果crversion的值=' 1.2.3'格式如果值是crversion =" 1.2.3"然后它没有用。为什么?

1 个答案:

答案 0 :(得分:0)

当然它不会起作用,因为在您的代码file.text.replace("crversion='$crversion '","crversion='"+major+ "." +m+"'")中,您只需将'version_number'之类的内容替换为其他版本。

您不处理"version_number"之类的情况。 一个愚蠢的修复file.setText(s.replace("crversion=\"$crversion \"","crversion='"+major+ "." +m+"'")),考虑到性能不是gradle脚本中的问题。