@Value上的maven archtype chokes(" $ {something:10}")不喜欢冒号

时间:2016-03-25 18:41:18

标签: java maven velocity maven-archetype

我试图在模板化的类中默认一些属性值,看起来像maven archtype插件正在使用的速度引擎是在':'有错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:generate (default-cli) on project standalone-pom: org.apache.maven.archetype.exception.ArchetypeGenerationFailure: Error merging velocity templates: Encountered ":" at line 18, column 40 of archetype-resources/__modelName__/src/main/java/client/CandyClientConfig.java
[ERROR] Was expecting one of:
[ERROR] "}" ...
[ERROR] <DOT> ...
[ERROR] "(" ...
[ERROR] -> [Help 1]
[ERROR] 

我尝试了几个转义序列并且它们都抱怨它们:

@Value("${candy.http.maxConnections\:100}")
@Value("${candy.http.maxConnections\\:100}")
@Value("${candy.http.maxConnections&#58;100}")

在我的原型pom

的顶部
#set($colon = ':')

然后

@Value("${candy.http.maxConnections$colon100}")

这应该很容易被击败。那么,我错过了什么?

2 个答案:

答案 0 :(得分:1)

我过去遇到过同样的问题,问题在于velocity和java代码使用的通用语法$ {...}。

虽然我认为这不是一个特别优雅的解决方案,但我解决了以下问题:

#set( $candy_http_max_connections_decl = '${candy.http.maxConnections:100}')
@Value("${candy_http_max_connections_decl}")

PS。为了在我的源文件中保留代码可读的许多此类声明,我保持#set声明接近它们的使用(在示例中,紧接在@Value(...)注释之上的行),而不是放置正如我通常所做的那样,它们位于文件的开头

答案 1 :(得分:0)

如果您使用'$'字符而不是':',例如:

#set( $dollar = '$' )

然后

@Value("${dollar}{candy.http.maxConnections:100}")

似乎有效