我最近开始使用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
这应该可以解决问题:
def tokens = [
'version': version
]
processResources {
inputs.properties(tokens)
expand(tokens)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |