4

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

4

4 回答 4

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
于 2012-08-20T15:40:47.800 回答
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() 没有成功。

于 2015-12-21T20:12:17.940 回答
1

我设法将解决方案从@maaxiim 缩减为一行:

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

$package 变量将始终可从 maven 原型插件中获得。其他内置函数也可以,但它们中的大多数都很长,并且 $artifactId.getClass() 看起来......错了。

于 2017-05-02T20:01:19.990 回答
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) )
于 2017-05-09T10:55:25.397 回答