2010-10-21 5 views
9

Je dois définir une propriété dans le fichier maven pom.xml qui doit être un UUID. Quelqu'un peut-il me direGénération d'UUID via Maven

quelle est la meilleure façon de définir une propriété pour UUID?

J'utilise un profil qui lance les GigaSpaces et GigaSpaces nécessite le nom du groupe que je

veux être unique (UUID). Donc, dans mon profil, je veux définir une valeur de propriété groupName qui

devrait changer pour chaque construction. J'ai moi-même écrit un plugin UUIDGenerator car je n'en ai trouvé aucun. Donc, je regarde Comment cela peut-il être réalisé? Est-ce que l'écriture d'un plugin est meilleure option ou il y a une option plus facile

.

Merci,

Shekhar

+0

Ça m'a pris comme 3 secondes pour Google et je me sentirais sale si elle a obtenu upvoted comme une réponse, mais est ici un excellent moyen de le faire: http://johannburkard.de/software/uuid/ –

+1

@David le lien montre comment ajouter lib qui génèrent UUID, mais je suppose que OP a besoin de définir UUID à définir dans pom lui-même. @Shekhar corrigez-moi si je me trompe –

+0

Qu'essayez-vous de réaliser? Le simple vay est de le charger via la ligne de commande: 'mvn build" -Dcommand.line.prop = hello again "' Et vous l'utilisez comme 'line.prop = $ {command.line.prop}' – amra

Répondre

7

Tout d'abord, si votre configuration requiert quelque chose appelé « nom du groupe », vous devriez probablement fournir une valeur significative. S'il doit être unique, vous pouvez ajouter des caractères générés, tels que "MyApplication-10937410". De plus, utiliser un UUID me semble utiliser un marteau pour casser une noix. Mais ceci est indépendant de votre problème réel, alors voici la solution que je propose:

Si ce n'est pas déjà fait, créez un plugin maven (il existe un archétype pour cela). Ajouter cette dépendance:

<dependency> 
     <groupId>org.apache.maven</groupId> 
     <artifactId>maven-project</artifactId> 
     <version>2.2.1</version> 
    </dependency> 

Voici comment votre MOJO devrait ressembler à:

/** 
* Goal which generates a group name. 
* 
* @goal generate 
* @phase initialize 
*/ 
public class GroupNameGeneratorMojo extends AbstractMojo { 

    /** 
    * @parameter expression="${project}" 
    * @required 
    * @readonly 
    */ 
    private MavenProject project; 

    @Override 
    public void execute() throws MojoExecutionException { 
     String groupName = ... ; 
     project.getProperties().setProperty("uniqueGroupName", groupName); 
    } 

} 

Dans vos projets réels pom, utilisez ${uniqueGroupName} whereever vous en avez besoin et configurer votre plugin comme celui-ci

<build> 
    <plugins> 
     <plugin> 
      <groupId>the.plugin.groupid</groupId> 
      <artifactId>groupNameGenerator</artifactId> 
      <executions> 
       <execution> 
        <goals><goal>generate</goal></goals> 
       </execution> 
      </executions> 
     <plugin> 
8

Arian's solution (implémentant un plugin maven) est un moyen propre pour mettre en œuvre votre exigence (et +1 pour sa réponse).

Mais si vous ne prévoyez pas de réutiliser votre plugin ailleurs, une alternative rapide serait de pirater le pom en utilisant le GMavenPlus plugin. Voici un exemple montrant comment le faire en utilisant une classe Java à partir d'une bibliothèque pour générer des UUID et le définir comme une propriété:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.stackoverflow</groupId> 
    <artifactId>Q3984794</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>org.safehaus.jug</groupId> 
     <artifactId>jug</artifactId> 
     <version>2.0.0</version> 
     <!-- the classifer is important!! --> 
     <classifier>lgpl</classifier> 
     </dependency> 
    </dependencies> 
    </dependencyManagement> 
    <dependencies> 
    ... 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.gmaven</groupId> 
     <artifactId>gmaven-plugin</artifactId> 
     <version>1.3</version> 
     <executions> 
      <execution> 
      <id>set-custom-property</id> 
      <phase>initialize</phase> 
      <goals> 
       <goal>execute</goal> 
      </goals> 
      <configuration> 
       <classpath> 
       <element> 
        <groupId>org.safehaus.jug</groupId> 
        <artifactId>jug</artifactId> 
        <classifier>lgpl</classifier> 
       </element> 
       </classpath> 
       <source> 
       import org.safehaus.uuid.UUIDGenerator 
       def uuid = UUIDGenerator.getInstance().generateRandomBasedUUID() 
       project.properties.setProperty('groupName', uuid.toString()) 
       </source> 
      </configuration> 
      </execution> 
      <execution> 
      <id>show-custom-property</id> 
      <phase>generate-resources</phase> 
      <goals> 
       <goal>execute</goal> 
      </goals> 
      <configuration> 
       <source> 
       def props = project.properties 
       props.each {key, value -&gt; println key + "=" + value} 
       </source> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Il suffit de lier le plug-in à une phase avant les choses de GigaSpaces.

La deuxième exécution est juste là à des fins de démonstration (pour montrer les propriétés):

 
$ mvn generate-resources 
[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Q3984794 1.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- gmaven-plugin:1.3:execute (set-custom-property) @ Q3984794 --- 
[INFO] 
[INFO] --- gmaven-plugin:1.3:execute (show-custom-property) @ Q3984794 --- 
downloadSources=true 
downloadJavadocs=true 
project.reporting.outputEncoding=UTF-8 
project.build.sourceEncoding=UTF-8 
groupName=814ff1a5-a102-426e-875c-3c40bd85b737 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
... 
Questions connexes