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