【问题标题】:Freemarker template for gradle build files用于 gradle 构建文件的 Freemarker 模板
【发布时间】:2015-07-15 14:49:36
【问题描述】:

您好,我正在尝试从 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}

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 好的,除了编写自定义模板加载器之外,没有简单的方法可以解决此问题。
    猜你喜欢
    • 2015-08-05
    • 2011-03-17
    • 2012-07-04
    • 2015-09-11
    • 2011-05-11
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多