如何使用Velocity宏连接字符串

时间:2017-05-04 19:03:12

标签: java maven macros velocity template-engine

在我正在创建的这个maven原型中,我尝试从artifact用宏获取一个字符串值,其中artifactId作为输入。返回的字符串将被指定为类的名称。如果artifactId是单个单词,我将首字母大写。如果它是与.连接的一系列字符串,我会使用最后一个单词并将第一个字母设为大写。

#macro( capital $str )
#if( $str.contains(".") )
#$str.substring($str.lastIndexOf('.')).substring(1,2).toUppercase()$str.substring($str.lastIndexOf('.')).substring(2)
#else
#$str.substring(0,1).toUppercase()$str.substring(1)
#end
#end

#set( $className = "#capital( $artifactId )" )
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.client;

public interface ${className}  {
  //...
}

然后我用mvn clean install安装了原型。但是,在从此原型生成的项目中,类名显示为:

public interface    #$str.substring(0,1).toUppercase()yapp

好像' $ str.substring(1)was correctly executed. However the first part $ str.substring(0,1).toUppercase()`不起作用。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为你弄乱了toUppercase方法的外壳。

尝试更改

#$str.substring(0,1).toUppercase()$str.substring(1)

#$str.substring(0,1).toUpperCase()$str.substring(1)