maven-plugin-BuildNumber révision svn disponible uniquement lorsqu'ils ne sont pas en utilisant le format

StackOverflow https://stackoverflow.com/questions/4319248

Question

Lors de l'utilisation du maven-plugin-BuildNumber 1.0 beta 4, il semble que je peux obtenir la révision svn à moins d'utiliser une balise <format> dans la configuration. Une fois que je l'utilise et <format> tag <item>buildnumber</item>, je reçois un numéro d'auto-incrémentée, mais elle ne correspond plus à la révision svn et je ne sais pas comment le récupérer. Y at-il un moyen d'utiliser le numéro de révision svn dans le <format>? La documentation est pas très claire.

Était-ce utile?

La solution

Le BuildNumber-maven-plugin est sacrément bizarre, ce qui est probablement la raison pour laquelle il est encore une version bêta. Le format est uniquement pour les éléments que vous souhaitez appliquer un format de message Java et dans la plupart des cas, il ne utile avec horodatages et chaînes de caractères. Si vous n'avez pas besoin d'un horodatage ne pas utiliser l'option de format lors de l'obtention du numéro de révision de Subversion. Si vous utilisez le format, comme vous l'avez indiqué, il vous donnera un numéro de build que toujours par un incréments plutôt que le numéro de version SCM.

Si vous avez besoin de l'horodatage ou avoir d'autres éléments de votre retirent du plugin BuildNumber ainsi que la révision de Subversion, faire chacun comme des exécutions séparées. Voici un exemple de la façon d'obtenir le numéro de révision de Subverison et l'horodatage de construction en utilisant deux exécutions distinctes du plug-in:

<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 clé de ce travail utilise l'élément buildNumberPropertyName. Commander de plugin page Utilisation pour plus d'informations sur l'utilité du message Java format est pour.

Autres conseils

Par le regard de celui-ci non. Si vous utilisez la configuration de format, vous êtes lié à l'utilisation de l'un des éléments par défaut.

De :

  

spécifier un message tel que spécifié par   java.text.MessageFormat. Cela déclenche   configuration "éléments" à lire

Et puis de :

  

spécifier les éléments correspondants pour   le message de format, tel que spécifié par   java.text.MessageFormat. article spécial   Les valeurs sont « horodatage » et   "BuildNumber / d *".

Aussi, si vous regardez le code pour le mojo ici une ou deux choses soutiennent ceci:

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

Par les sons de celui-ci que vous demandez une nouvelle fonctionnalité (pas une mauvaise idée en passant). Je le soumettre en tant que telle .

Je couriez dans le même problème et pour quelques instants, je pensais que la solution proposée par @ Jean-Rémy Revy works..but il n'a pas pour une raison quelconque.

Il se trouve que dans BuildNumber-maven-plugin-1.2, ils ont ajouté le support pour une propriété spéciale appelée scmVersion. A ce jour v1.2 n'est pas disponible dans le repository si le site Web du plugin suggère qu'il est GA. Vous aurez donc besoin à la caisse de la source (http://svn.codehaus.org/mojo/tags/buildnumber-maven-plugin-1.2/) et construire ($ mvn install). Cela installera également le plug-in dans votre dépôt local.

Après ce faire ceci:

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

Il y a une raison convaincante pour laquelle cela a été fait par le développeur du plug-in. Une méthode recommandée pour obtenir l'horodatage de construction du projet est le suivant:

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

Donc tout ce dont vous avez besoin est d'obtenir un numéro de révision qui peut être fait très bien avec une seule invocation du BuildNumber-maven-plugin en fonction de sa documentation.

P.S. Avoir une exécution au lieu de deux (comme cela a été proposé) enregistre près d'une seconde chaque fois le plug-in est invoqué;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top