我试图在模板化的类中默认一些属性值,看起来像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:100}")
在我的原型pom
的顶部#set($colon = ':')
然后
@Value("${candy.http.maxConnections$colon100}")
这应该很容易被击败。那么,我错过了什么?
答案 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}")
似乎有效