当变量发生变化时重新运行processResoures

时间:2016-06-30 05:04:59

标签: gradle build

我最近开始使用gradle。我很快发现你可以轻松告诉gradle使用以下代码段自动检测当前版本:

def getVersionName = { ->
  def stdout = new ByteArrayOutputStream()
  exec {
    commandLine 'git', 'describe', '--dirty=-SNAPSHOT'
    standardOutput = stdout
  }
  return stdout.toString().trim()
}

version = getVersionName()

我发现你可以将这个版本号替换为你的资源:

processResources {
  expand(version: version)
}

在文件中你想要的版本号是这样的(应该适用于任何变量)

version: ${version}

替换效果很好并按预期工作。

但是,当版本号发生变化且没有资源表明资源没有被重新处理时,我遇到了一个问题,因此版本号没有在这些文件中更新。
我通过告诉任务每次都这样运行来解决这个问题:

processResources {
  expand(version: version)

  outputs.upToDateWhen { false }
}

这是有效的,但我觉得这是一个非常肮脏的黑客。

我想要的是一个逻辑,它会在资源文件发生变化时重新运行任务(就像它已经发生的那样),或者当版本号(或者我想要关心的任何变量或变量)发生变化时

如果有兴趣的话,这里是实际文件的链接:https://gitlab.crazyblock-network.net/BrainStone/MplManager/blob/master/build.gradle
这是回购:https://gitlab.crazyblock-network.net/BrainStone/MplManager

1 个答案:

答案 0 :(得分:2)

这应解决问题:

def tokens = [
    'version': version
]

processResources {
    inputs.properties(tokens)
    expand(tokens)
}