<format>
在使用 maven-buildnumber-plugin 1.0 beta 4 时,除非我在配置中使用标签,否则我似乎可以获得 svn 修订版。一旦我使用<format>
和<item>buildnumber</item>
标记,我得到一个自动递增的数字,但它不再对应于 svn 修订版,我不知道如何取回它。有没有办法在里面使用 svn 修订号<format>
?文档不是很清楚。
4 回答
buildnumber-maven-plugin 非常古怪,这可能就是它仍然是 beta 的原因。该格式仅适用于您希望将 Java 消息格式应用于的那些项目,并且在大多数情况下,它仅适用于时间戳和文字字符串。如果您不需要时间戳,请不要在获取 Subversion 修订号时使用格式选项。如果您使用该格式,那么就像您指出的那样,它将为您提供一个始终以 1 递增的内部版本号,而不是 SCM 版本号。
如果您确实需要时间戳或从 buildnumber 插件以及 Subversion 版本派生的其他项目,请将每个项目作为单独的执行来执行。这是一个如何使用插件的两个单独执行来获取 Subverison 修订号和构建时间戳的示例:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.0-beta-4</version>
<executions>
<execution>
<id>generate-buildnumber</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<useLastCommittedRevision>true</useLastCommittedRevision>
<buildNumberPropertyName>buildRevision</buildNumberPropertyName>
</configuration>
</execution>
<execution>
<id>generate-timestamp</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<format>{0,date,yyyy-MM-dd HH:mm:ss}</format>
<items>
<item>timestamp</item>
</items>
<buildNumberPropertyName>buildDateTime</buildNumberPropertyName>
</configuration>
</execution>
</executions>
</plugin>
完成这项工作的关键是使用 buildNumberPropertyName 元素。查看插件的使用页面,了解更多关于 Java 消息格式有用性的信息。
看起来没有。如果您使用格式配置,那么您必须使用默认项目之一。
从这里:
指定由 java.text.MessageFormat 指定的消息。这会触发要读取的“项目”配置
然后从这里:
按照 java.text.MessageFormat 的规定,为格式消息指定相应的项。特殊项目值是“timestamp”和“buildNumber/d*”。
此外,如果您在这里查看 mojo 的代码,有几件事支持这一点:
if ( format != null )
{
if ( items == null )
{
throw new MojoExecutionException(
" if you set a format, you must provide at least one item, "
+ "please check documentation " );
}
和:
else
{
// Check if the plugin has already run.
revision = project.getProperties().getProperty(
this.buildNumberPropertyName );
if ( this.getRevisionOnlyOnce && revision != null)
{
getLog().debug( "Revision available from previous execution" );
return;
}
听上去你是在要求一个新功能(顺便说一句,这不是一个坏主意)。我会在这里提交。
我确实遇到了同样的问题,有一段时间我认为@Jean-Rémy Revy 建议的解决方案有效..但由于某种原因它没有。
事实证明,在 buildnumber-maven-plugin-1.2 中,他们添加了对名为 scmVersion 的特殊属性的支持。到目前为止 v1.2 在 Maven 存储库中不可用,尽管插件的网站表明它是 GA。所以你需要检查源代码(http://svn.codehaus.org/mojo/tags/buildnumber-maven-plugin-1.2/)并构建它($ mvn install)。这还将在您的本地存储库中安装插件。
在此之后,只需执行以下操作:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<format>{0,date,yyyy-MM-dd HH:mm:ss}.{1}</format>
<items>
<item>timestamp</item>
<item>scmVersion</item>
</items>
</configuration>
</plugin>
插件开发人员这样做有一个令人信服的理由。获取项目构建时间戳的推荐方法如下:
<project>
<properties>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
<buildDateTime>${maven.build.timestamp}</buildDateTime>
</properties>
</project>
因此,您所需要的只是获得一个修订号,根据其文档,只需一次调用 buildnumber-maven-plugin 就可以很好地完成。
PS 每次调用插件时执行一次而不是两次(如所提供的那样)可节省近一秒钟;)