2015-07-15 3 views
0

Привет Я пытаюсь сделать файл build.gradle из шаблона Freemarker, и я бегу, чтобы небольшая проблема как Freemarker и де Gradle поддержки ${someString}шаблон Freemarker для Gradle строить файлы

DSL Так что где-то в gradle script У меня есть определение поля/переменной.

Например, я определить строку, как показано ниже: def gitSha = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()

И будет использовать, что где-то в Gradle файл следующим образом: filename = "new-archive-${gitSha}.jar"

Но тогда, когда я генерировать Gradle файл с Freemarker я получаю ошибка gitSha является нулевой или не определена в модели данных. Есть ли способ сделать различие между ${gitSha}, который предназначен для DSL градации, а другой ${someStrings}, которые являются частью шаблона Freemarker?

ответ

0

В принципе правильным решением было бы использовать что-то другое вместо ${} на некоторых из двух языков (скажем, @{}). Но, по крайней мере, в Freemarker это не настраивается. Но это может эмулировать (вроде ...), если вы пишете обычай TempalateLoader, что просто оборачивает другой TemplateLoader, но фильтрует Reader так что @{ -s заменяются ${ -s и ${ заменяются @{. И тогда, то же преобразование должно быть применено к Writer, где Freemarker записывает свой вывод в, поэтому @{ на выходе заменяются ${-s. (Надеюсь, BTW, что рано или поздно Freemarker будет иметь настраиваемый синтаксис интерполяции, потому что эта проблема с ${ возникает довольно часто, но это будущее ...)

+0

хорошо, поэтому нет простого способа исправить это другое, пользовательский templateloader. – Aegis

Смежные вопросы