【问题标题】:Rerun processResoures when variable changes变量更改时重新运行 processResources
【发布时间】: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

【问题讨论】:

    标签: gradle build


    【解决方案1】:

    这应该可以解决问题:

    def tokens = [
        'version': version
    ]
    
    processResources {
        inputs.properties(tokens)
        expand(tokens)
    }
    

    【讨论】:

    • 似乎适用于我只有一个变量的情况。但是当我在地图中有几个时,我会收到这样的错误:Could not find method expand() for arguments [{version=2.9-1-gcb183f9-SNAPSHOT, MPLversion=1.0.0}]
    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多