Gradle构建文件的Freemarker模板

时间:2015-07-15 14:49:36

标签: android android-studio gradle android-gradle freemarker

您好我正在尝试从freemarker模板制作build.gradle文件,而我正在遇到Freemarker和de gradle DSL支持的小问题${someString}

所以在gradle脚本的某处我有字段/变量定义。

例如,我定义了一个如下所示的字符串: def gitSha = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()

并将使用gradle文件中的其他位置,如下所示: filename = "new-archive-${gitSha}.jar"

但是当我使用Freemarker生成gradle文件时,我得到错误gitSha为null或未在数据模型中定义。有没有办法区分作为gradle DSL的${gitSha}和作为Freemarker模板一部分的其他${someStrings}

1 个答案:

答案 0 :(得分:0)

原则上,正确的解决方案是在两种语言中使用其他内容而不是${}(比方说,@{})。但至少在Freemarker中,这是不可配置的。但它可以被模拟(有点......),如果你编写一个自定义TempalateLoader只包装另一个TemplateLoader,但过滤Reader以便@{ - s已替换为${ - s,${将替换为@{。然后,必须将相同的转换应用于Freemarker将其输出写入的Writer,因此输出中的@{将替换为${ - s。 (我希望BTW迟早Freemarker会有一个可配置的插值语法,因为${的这个问题经常出现,但这就是未来......)