maven-buildnumber-plugin svn修订版仅在不使用格式时可用

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

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

如果您确实需要时间戳或者从buildnumber插件以及Subversion修订版中获得其他项目,请将每个项目作为单独的执行执行。 以下是如何使用插件的两个单独执行来获取Subverison修订版号和构建时间戳的示例:

  org.codehaus.mojo buildnumber-maven-plugin 1.0-beta-4   generate-buildnumber validate  create   true buildRevision    generate-timestamp validate  create   {0,date,yyyy-MM-dd HH:mm:ss}  timestamp  buildDateTime     

使这项工作的关键是使用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; } 

通过它的声音,你要求一个新的function(顺便说一句,这不是一个坏主意)。 我会在这里提交。

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

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

在此之后就这样做:

  org.codehaus.mojo buildnumber-maven-plugin 1.2   validate  create     {0,date,yyyy-MM-dd HH:mm:ss}.{1}  timestamp scmVersion    

有一个令人信服的理由说明为什么插件开发人员已经完成了这项工作。 获取项目构建时间戳的推荐方法如下:

   yyyy-MM-dd HH:mm:ss ${maven.build.timestamp}   

所以你需要的是获得一个修订号,根据它的文档,只需一次调用buildnumber-maven-plugin即可完成。

PS每执行一次执行而不是两次(如提供的那样),每次调用插件时都会保存一秒钟;)