Java maven buildnumber插件svn修订版仅在不使用格式时可用

Java maven buildnumber插件svn修订版仅在不使用格式时可用,java,maven-2,build-automation,buildnumber-maven-plugin,Java,Maven 2,Build Automation,Buildnumber Maven Plugin,在使用maven buildnumber插件1.0 beta 4时,我似乎可以获得svn版本,除非在配置中使用标记。一旦我使用和buildnumber标记,我会得到一个自动递增的数字,但它不再对应于svn修订版,我不知道如何取回它。是否有办法在中使用svn修订号?文档不是很清楚。从外观上看,不是。如果使用格式配置,则必须使用其中一个默认项 发件人: 指定由指定的消息 java.text.MessageFormat这会触发 要读取的“项目”配置 然后从: 指定相应的项目 格式消息,由指定 java

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

从外观上看,不是。如果使用格式配置,则必须使用其中一个默认项

发件人:

指定由指定的消息 java.text.MessageFormat这会触发 要读取的“项目”配置

然后从:

指定相应的项目 格式消息,由指定 java.text.MessageFormat。特别项目 值为“时间戳”和 “建筑编号/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 " );
    }
以及:


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

buildnumber maven插件非常古怪,这可能就是它仍然是测试版的原因。该格式仅适用于您希望应用Java消息格式的项目,在大多数情况下,它仅适用于时间戳和文本字符串。如果您不需要时间戳,那么在获取Subversion版本号时不要使用format选项。如果您使用该格式,那么正如您所指出的,它将为您提供一个始终递增1的内部版本号,而不是SCM版本号

如果您确实需要时间戳或从buildnumber插件以及Subversion版本派生出其他项,请将每个项作为单独的执行来执行。下面是一个示例,说明如何使用插件的两次单独执行来获取Subversion修订号和构建时间戳:


org.codehaus.mojo

更多关于Java消息格式有用性的信息,请参见第页。

插件开发人员之所以这么做,有一个令人信服的原因。获取项目构建时间戳的推荐方法如下:

<project>
  <properties>
    <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
    <buildDateTime>${maven.build.timestamp}</buildDateTime>    
  </properties>
</project>

yyyy MM dd HH:MM:ss
${maven.build.timestamp}
因此,您所需要的只是获得一个修订号,根据其文档,只需调用buildnumber maven插件就可以很好地完成


另外,每次调用插件时,由两次执行改为一次执行(如提供的)可节省近1秒的时间;)

我确实遇到了同样的问题,有那么一会儿我认为@Jean-Rémy Revy建议的解决方案是可行的……但出于某种原因,它没有奏效

事实证明,在buildnumber-maven-plugin-1.2中,他们添加了对一个名为scmVersion的特殊属性的支持。到目前为止,maven存储库中还没有v1.2版本,尽管插件的网站表明它是GA版本。因此,您需要检查源代码(http://svn.codehaus.org/mojo/tags/buildnumber-maven-plugin-1.2/ )并构建它($mvn安装)。这也将在您的本地存储库中安装插件

在此之后,只需执行以下操作:


org.codehaus.mojo
buildnumber maven插件
1.2
验证
创造
{0,日期,yyyy-MM-dd HH:MM:ss}.{1}
时间戳
SCM版本

您是否在pom中设置了开发人员scm?@Steven我认为buildnumber插件没有使用该功能。上次我使用它时(大约一年前),它刚刚启动了一个
svn提交
过程,所以文件系统中的svn信息就是使用的。但是,是的,有一个SCM集合,它可以工作,除非我指定了格式和项。我不清楚,因为他吃了我的xml。修正了。谢谢你深入研究,我希望有人会告诉我我做错了什么。有时当我问一个问题时:“不,你不能那样做”是不够的:)它似乎不支持
scmBranch
作为一个特殊项目。聪明。我可以看到它也被用来获取
scmBranch
<project>
  <properties>
    <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
    <buildDateTime>${maven.build.timestamp}</buildDateTime>    
  </properties>
</project>
<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>