Maven原型+ Velocity:如何显示日期

时间:2012-07-12 13:37:11

标签: maven-3 velocity maven-archetype

我有一个maven原型项目。当我使用这个原型时,我想要一些文件报告实际日期。我尝试使用$ date,但Velocity无法识别它。我找到了一个名为DateTools的东西,但我不知道如何使用它。这是我第一次使用Velocity。

4 个答案:

答案 0 :(得分:3)

不幸的是,Maven Archetype插件没有与Velocity Tools捆绑在一起。我通过修改Maven Archetypes插件添加了它。按照以下步骤,假设您正在使用Maven 2.2.1:

svn co -q http://svn.apache.org/repos/asf/maven/archetype/tags/maven-archetype-2.2
cd maven-archetype-2.2
curl -k -O https://raw.github.com/gist/3404715/59c7fa1c20c60e2a165de4109c2acffb8026febd/velocity-tools.patch
patch -p0 -i velocity-tools.patch
mvn install

现在将在本地安装修改后的Maven Archetype插件。

现在应该在模板中使用

$date,例如

The date is $date

...为:

The date is Aug 20, 2012 4:40:22 PM

答案 1 :(得分:3)

(为复活一个旧问题道歉,但我刚刚通过一种方法来实现这一目标,而无需拉动和修补插件)。

对于任何想要在其maven原型模板中引用日期字段的人,我能够使用我的pom.xml模板顶部的以下一组定义

#set( $str = "" )
#set( $dt = $str.getClass().forName("java.util.Date").newInstance() )
#set( $year = $dt.getYear() + 1900 )

如果您在插入这些行时已经有模板可用的基于对象的变量,那么您可以抓住$ str声明并使用其中一个变量,因为它并不重要。引用来自。

的Class.forName()

注意:我尝试使用Calendar.getInstance()的尝试失败了。

答案 2 :(得分:1)

我设法将解决方案从@maaxiim减少到单行:

#set( $year = $package.getClass().forName("java.util.Date").newInstance().getYear() + 1900 )

$ package变量将始终从maven archetype插件中获得。其他内置函数也可以工作,但是大多数都很长,$ artifactId.getClass()只是看起来......错了。

答案 3 :(得分:1)

在Java 8中,使用格式化程序:

#set( $ldt = $package.getClass().forName("java.time.LocalDateTime").getMethod("now").invoke(null) )
#set( $dtf = $package.getClass().forName("java.time.format.DateTimeFormatter").getMethod("ofPattern", $package.getClass()).invoke(null, "yyyy/MM/dd HH:mm:ss") )
#set( $date = $ldt.format($dtf) )
相关问题