Как установить архетип maven с кодом Kotlin, который содержит интерполяцию строк? - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь установить архетип maven, который я создал из проекта Kotlin. Всякий раз, когда я пытаюсь установить архетип, я получаю эту ошибку:

Archetype IT 'basic' failed: org.apache.maven.archetype.exception.ArchetypeGenerationFailure: Error merging velocity templates: Encountered "()}\"\n 

строка кода, которая вызывает ошибку:

return "redirect:${getRequestMapping()}"

Что я могу сделать, чтобы решить эту проблему? Я часто использую интерполяцию строк и не хочу заменять их конкатенационными строками

1 Ответ

2 голосов
/ 29 апреля 2019

Знак доллара «$» имеет значение для Apache Velocity, который является движком, используемым архетипами. Velocity видит '$', думает, что он должен что-то с ним сделать, но синтаксис неправильный (для Velocity) и он не работает.

Исправление здесь заключается в том, чтобы избежать знака доллара, поэтому Velocity его игнорирует, как описано в документации .

Примерно так, который показывает знак доллара, но также и другие, которые, возможно, потребуется экранировать в зависимости от варианта использования:

## File will be filtered by Velocity - it is a Velocity template.
## Establish escape sequences for Velocity special chars.
#set( $symbol_pound = '#' )    
#set( $symbol_dollar = '$' )   
#set( $symbol_escape = '\' )

## Use the variable anywhere the interpolation is used
return "redirect:${symbol_dollar}{getRequestMapping()}"

Документы Velocity показывают ту же технику, используя только 'D' в качестве имени переменной. Мне нравится более длинное имя для поиска и самостоятельного документирования.

...