【发布时间】:2015-05-11 05:47:09
【问题描述】:
我正在使用 mvn archetype:generate 模板化我项目中的一些内容。我在使用 Maven 3.2.2 Velocity Engine split() 方法时遇到了一些麻烦。我无法具体弄清楚 Velocity Maven 使用的是什么版本。
#set($foo = "one:a, two:b, three:c")
$!foo
$foo.split(",")
#foreach($bar in $foo.split(","))
$!bar
$bar.split(":")
#set($number = $bar.split(":").get(0))
number = $!number
#set($letter = $bar.split(":").get(1))
letter = $!letter
#end
预期输出:
one:a, two:b, three:c
['one:a', 'two:b', 'three:c']
one:a
['one', 'a']
number = one
letter = a
two:b
...
实际输出:
one:a, two:b, three:c
[Ljava.lang.String;@6cff380
one:a
[Ljava.lang.String;@5a587f23
number =
letter =
two:b
[Ljava.lang.String;@2c8b586a
...
如您所见,#foreach 块中使用的第一个 split() 工作正常,因为我期望用逗号分割字符串并遍历三个子字符串,但是当我打印 $bar.split(":") 我得到那个奇怪的字符串指针和 #set($number = $bar.split(":").get(0)) 什么也没打印,因为 .get() 是在字符串而不是数组上调用的。考虑到这一点,我想出了这个可怕的黑客:
#foreach ($bar in $foo.split(","))
#set ($i = 0)
#foreach($hack in $bar.split(":"))
#if($i == 0)
#set ($number = $hack)
#else
#set ($letter = $hack)
#end
#set($i = $i + 1)
#end
number = $number
letter = $letter
#end
但是必须有更好的方法,我不能凭良心使用此代码。我已经使用 Velocity 总共 3 个小时了,所以我肯定在这里受到责备,#foreach 知道我不知道什么?
感谢您的帮助。
编辑:根据this maven 原型正在使用 Velocity Engine 1.5
【问题讨论】:
标签: maven velocity maven-archetype