我最近开始使用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
答案 0 :(得分:2)
这应解决问题:
def tokens = [
'version': version
]
processResources {
inputs.properties(tokens)
expand(tokens)
}