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

Bra*_*one 8 build gradle

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

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

version = getVersionName()
Run Code Online (Sandbox Code Playgroud)

我发现你可以将这个版本号替换为你的资源,如下所示:

processResources {
  expand(version: version)
}
Run Code Online (Sandbox Code Playgroud)

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

version: ${version}
Run Code Online (Sandbox Code Playgroud)

替代工作很好,并按预期工作.

但是,当版本号发生更改且没有资源确实没有重新处理资源时,我遇到了问题,因此版本号不会在这些文件中更新.
我通过告诉每次运行这样的任务来解决这个问题:

processResources {
  expand(version: version)

  outputs.upToDateWhen { false }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

JB *_*zet 2

这应该可以解决问题:

def tokens = [
    'version': version
]

processResources {
    inputs.properties(tokens)
    expand(tokens)
}
Run Code Online (Sandbox Code Playgroud)