2010-11-30 14 views
9

Al usar maven-buildnumber-plugin 1.0 beta 4, parece que puedo obtener la revisión svn a menos que use una etiqueta <format> dentro de la configuración. Una vez que uso la etiqueta <format> y <item>buildnumber</item>, obtengo un número de incremento automático, pero ya no corresponde a la revisión svn y no sé cómo recuperarlo. ¿Hay alguna manera de usar el número de revisión svn dentro del <format>? La documentación no es muy clara.maven-buildnumber-plugin svn revisión disponible solo cuando no se utiliza el formato

+0

Es usted la creación de un desarrollador de SMC en su pom? – Steven

+0

@Steven No creo que el plugin buildnumber lo use. La última vez que lo usé (hace aproximadamente un año), acaba de comenzar un proceso 'svn commit', por lo que la información SVN en el sistema de archivos es lo que se usa. –

+0

Pero sí, hay un conjunto SCM y funciona, excepto cuando especifico formato y elementos. No estaba claro porque SO se comió mi xml. Arreglado. – gtrak

Respuesta

10

El plugin buildnumber-maven-plugin es bastante peculiar, lo cual es probablemente la razón por la cual todavía es una versión beta. El formato es solo para aquellos elementos a los que desea aplicar un formato de mensaje Java y, en la mayoría de los casos, solo es útil con marcas de tiempo y cadenas literales. Si no necesita una marca de tiempo, no use la opción de formato cuando obtenga el número de revisión de Subversion. Si usa el formato, como lo indicó, le dará un número de compilación que siempre se incrementa en uno en lugar del número de versión de SCM.

Si necesita la marca de tiempo o tiene otros elementos derivados del plugin buildnumber, así como la revisión de Subversion, realice cada uno como ejecuciones separadas. Aquí está un ejemplo de cómo obtener el número Subverison revisión y la marca de tiempo de compilación usando dos ejecuciones separadas del plugin:

<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> 

La clave para hacer este trabajo es utilizar el elemento buildNumberPropertyName. Consulte la página del complemento Usage para obtener más información sobre la utilidad del formato de mensaje de Java.

+0

Clever. Puedo ver que esto se usa para obtener 'scmBranch' también. – Snekse

3

Por lo que parece no. Si usa la configuración de formato, está obligado a usar uno de los elementos predeterminados.

De here:

especificar un mensaje según lo especificado por java.text.MessageFormat. Esto desencadena "elementos" de configuración para ser leídos

Y luego desde here:

especificar los elementos correspondientes para el mensaje de formato, según lo especificado por java.text.MessageFormat. Los valores especiales del artículo son "marca de tiempo" y "buildNumber/d *".

Además, si nos fijamos en el código para el mojo here un par de cosas apoyan esto:

if (format != null) 
{ 
    if (items == null) 
    { 
     throw new MojoExecutionException(
      " if you set a format, you must provide at least one item, " 
      + "please check documentation "); 
    } 

Y:

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; 
    } 

Por los sonidos de la misma que está solicitando una nueva función (no es una mala idea por cierto). Lo enviaría como tal here.

+0

gracias por profundizar en eso, esperaba que alguien me dijera que solo estaba haciendo algo mal – gtrak

+0

Usted apuesta. A veces, cuando hago una pregunta, "no, no puedes hacer eso" no es suficiente :) – javamonkey79

2

Hay una razón convincente por la que esto ha sido hecho por el desarrollador del complemento.Una forma recomendada de conseguir marca de tiempo de construcción del proyecto es el siguiente:

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

Así que todo lo que necesita es conseguir un número de revisión que se puede hacer bastante bien con una sola invocación de la BuildNumber-maven-plugin de acuerdo con su documentación.

P.S. Tener una ejecución en lugar de dos (como se ofreció) ahorra cerca de un segundo cada vez que se invoca el complemento;)

3

Me encontré con el mismo problema y por unos momentos pensé que la solución sugerida por @ Jean-Rémy Revy funciona ... pero no lo hizo por alguna razón.

Resulta que en buildnumber-maven-plugin-1.2 han agregado soporte para una propiedad especial llamada scmVersion. A partir de ahora v1.2 no está disponible en el repositorio de maven, aunque el sitio web del complemento sugiere que es GA. Por lo tanto, deberá verificar el origen (http://svn.codehaus.org/mojo/tags/buildnumber-maven-plugin-1.2/) y compilarlo ($ mvn install). Esto también instalará el complemento en su repositorio local.

Después de esto simplemente hacer esto:

<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> 
+0

Lástima que no parezca admitir 'scmBranch' como un elemento especial. – Snekse

Cuestiones relacionadas