【发布时间】:2016-06-30 05:04:59
【问题描述】:
我最近开始使用 gradle。我很快发现,您可以使用以下 sn-p 轻松告诉 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
【问题讨论】: