9

<format>在使用 maven-buildnumber-plugin 1.0 beta 4 时,除非我在配置中使用标签,否则我似乎可以获得 svn 修订版。一旦我使用<format><item>buildnumber</item>标记,我得到一个自动递增的数字,但它不再对应于 svn 修订版,我不知道如何取回它。有没有办法在里面使用 svn 修订号<format>?文档不是很清楚。

4

4 回答 4

10

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 消息格式有用性的信息。

于 2010-12-01T23:11:32.020 回答
3

看起来没有。如果您使用格式配置,那么您必须使用默认项目之一。

这里

指定由 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;
    }

听上去你是在要求一个新功能(顺便说一句,这不是一个坏主意)。我会在这里提交。

于 2010-12-01T02:05:50.453 回答
3

我确实遇到了同样的问题,有一段时间我认为@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>
于 2012-10-14T23:03:50.067 回答
2

插件开发人员这样做有一个令人信服的理由。获取项目构建时间戳的推荐方法如下:

<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 每次调用插件时执行一次而不是两次(如所提供的那样)可节省近一秒钟;)

于 2011-11-24T15:27:30.190 回答