2010-10-21 12 views
9

Necesito establecer una propiedad en el archivo maven pom.xml que debe ser un UUID. ¿Alguien me puede decirGeneración de UUID a través de Maven

cuál es la mejor manera de establecer una propiedad para UUID?

estoy usando un perfil que lanzar las GigaSpaces y GigaSpaces requiere el nombre del grupo que he

quiero ser único (UUID). Por lo tanto, en mi perfil quiero establecer un valor de propiedad groupName que

debe cambiar para cada compilación. Escribí un plugin de UUIDGenerator porque no encontré ninguno.

Entonces, estoy buscando ¿Cómo se puede lograr esto? Está escribiendo una mejor opción de complemento o hay una opción más fácil

.

Gracias,

Shekhar

+0

me llevó como 3 segundos para Google y me sentía sucia si hacía upvoted como una respuesta, pero aquí hay un excelente forma de hacerlo: http://johannburkard.de/software/uuid/ –

+1

@David El enlace muestra cómo agregar lib que genera UUID, pero supongo que OP necesita configurar el UUID para que se establezca en pom. @Shekhar corrígeme si estoy equivocado –

+0

¿Qué estás tratando de lograr? El vay simple es cargarlo a través de la línea de comando: 'mvn build" -Dcommand.line.prop = hola otra vez "' Y la usas como 'line.prop = $ {command.line.prop}' – amra

Respuesta

7

En primer lugar, si su puesta en marcha requiere algo llamado "nombre de grupo", es probable que deberían proporcionar un valor significativo. Si tiene que ser único, puede agregar algunos caracteres generados, como "MiAplicación-10937410". Además, usar un UUID me parece como usar un martillo para romper una nuez. Pero esto es independiente de su problema real, así que aquí está la solución que propongo:

Si aún no lo ha hecho, cree un plugin maven (hay un arquetipo para eso). Añadir esta dependencia:

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

Así es como su MOJO debe verse como:

/** 
* 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); 
    } 

} 

En sus proyectos reales POM, utilice ${uniqueGroupName} dondequiera que lo necesite y configurar el plug-in como esto

<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 (implementando un plugin maven) es IMO una forma limpia de implementar su requerimiento (y +1 por su respuesta).

Pero si no planeas reutilizar tu complemento en otro lugar, una alternativa más rápida sería piratear el pom usando el GMavenPlus plugin. He aquí un ejemplo que muestra cómo hacerlo usando una clase Java de una biblioteca para generar algo de UUID y configurarlo como una propiedad:

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

Sólo se unen el plugin para una fase previa a la materia GigaSpaces.

La segunda ejecución es allí sólo para fines de demostración (para mostrar las propiedades):

 
$ 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] ------------------------------------------------------------------------ 
... 
Cuestiones relacionadas