在Gradle中过滤资源时,如何将令牌的评估推迟到执行阶段?

时间:2013-04-12 21:34:57

标签: gradle

我有以下配置来处理资源:

project.ext.releaseVersion = {
    project.version.contains("SNAPSHOT") ? timestamp : project.version
}

processResources {
    filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [version: project.ext.releaseVersion()])
}

它可以工作,但project.ext.releaseVersion()在配置阶段得到评估,我无法弄清楚如何延迟它直到执行阶段。

2 个答案:

答案 0 :(得分:2)

事实证明这就像在doFirst块中应用过滤器一样简单(如上面Peter所述)。我也摆脱了关闭以获得更新的价值,但这可能只是个人偏好。

processResources {
    doFirst {
        def releaseVersion =
            project.version.contains("SNAPSHOT") ? project.ext.timestamp : project.version

        filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [version: releaseVersion])
    }
}

答案 1 :(得分:0)

您可以在afterEvaluate()方法调用中包装processResources以延迟评估:

afterEvaluate {
    processResources {
        filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [version: project.ext.releaseVersion()])
    }
}