2012-05-01 17 views
6

Estoy usando maven-assembly-plugin para compilar un archivo jar monolítico ejecutable con dependencias. También estoy usando el filtrado de recursos para establecer algunas propiedades personalizadas, específicas del carril (dev, stage, prod, etc.).Incluya el nombre del perfil de Maven en ensamblado-complemento creado (con dependencias) jar

¿Cómo hago para que el Nombre final del contenedor incluya el nombre del carril (dev, stage, prod, etc.)?

Me gustaría que el siguiente mvn comandos para dar lugar a los tarros que parecen algo como esto:

  • mvn instalación limpia -P DEV - Instalar> WS-cliente-DEV.jar
  • mvn limpia -P ETAPA -> WS-cliente-STAGE.jar
  • mvn instalación limpia PROD -P -> WS-cliente-PROD.jar

¿hay una propiedad experta en algún lugar no puedo encontrar? Me gustaría evitar el uso de un argumento de línea de comando redundante si es posible (es decir, 'mvn clean install -P DEV -Dlane = DEV').

Aquí está mi configuración de montaje plugin:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2.2</version> 
    <executions> 
     <execution> 
      <id>jar-with-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <finalName>ws-client</finalName> 
     <appendAssemblyId>false</appendAssemblyId> 
     <archive> 
      <manifest> 
       <mainClass>Example</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 

Respuesta

9

Similar a Bhaskar pero ligeramente modificado.

Después de la > etiqueta < acumulación, añadir

<finalName>${project.artifactId}-${lane}</finalName> 

puede establecer el valor de carril como una propiedad en el perfil.

<profiles> 
    <profile> 
     <id>DEV</id> 
     <properties> 
      <lane>DEV</lane> 
     </properties> 
    </profile> 
</profiles> 

luego ejecutar la acumulación como usted dice: mvn ... -P DEV (por ejemplo MVN instalación limpia -P DEV)

+0

¡Fantástico, funcionó maravillosamente! – chadmaughan

+0

El nombre final no funcionará en el artefacto desplegado solo en el artefacto que está almacenado en la carpeta de destino en su ejecución actual. – khmarbaise

+0

@khmarbaise - Correcto. Para este uso particular, el jar se está distribuyendo fuera de un repositorio (lo sé, no es ideal). Quería una indicación visual para que el consumidor "sin productos" sepa qué carril y qué propiedades están usando simplemente echando un vistazo al archivo jar en su classpath. – chadmaughan

2

Después de la > etiqueta < acumulación, añadir

<finalName>${project.artifactId}-${lane}</finalName> 

y establecer el "carril" variable de entorno al nombre del perfil, por ejemplo,

mvn -P DEV DEV = -Dlane etc.

O bien, puede ser un poco más creativo y descubrir el ID del perfil activo como se describe aquí Maven - Can I reference profile id in profile definition?

EDITAR ------

Si desea evitar argumentos redundantes.

¿Por qué no activar los perfiles correspondientes utilizando env. propiedad.

así sucesivamente línea de comandos

mvn -Dlane=DEV|STAGE|PROD 

y en el pom

<profile> 
    <id>DEV</id> 
    <activation> 
    <property> 
     <name>lane</name> 
     <value>DEV</value> 
    </property> 
    </activation> 
    <build> 
    // rest of the profile 
</profile> 

y lo mismo para los perfiles de escenario y prod.

+0

Gracias por la respuesta.Quería evitar usar un argumento de línea de comando redundante si fuera posible (he actualizado mi pregunta para reflejar eso). El enlace provisto es interesante. ¿Alguna idea sobre cómo hacer referencia al perfil de línea de comando especificado (activo) a través de una propiedad mvn? – chadmaughan

+0

Editado con más información acerca de evitar redunduncy –

Cuestiones relacionadas