2012-05-01 3 views
6

Sto utilizzando il plugin maven-assembly-per creare un jar monolitico eseguibile con dipendenze. Sto anche utilizzando il filtraggio delle risorse per impostare alcune proprietà personalizzate, specifiche della corsia (dev, stage, prod, ecc.).Includi il nome del profilo Maven in assembly-plugin built (con dipendenze) jar

Come faccio a rendere finaleName del barattolo include il nome della corsia (dev, stage, prod, ecc)?

mi piacerebbe il seguente mvn comandi di provocare vasi che sembrano qualcosa di simile:

  • mvn installazione pulita -P DEV -> WS-client-DEV.jar
  • mvn clean install -P STAGE -> WS-client-STAGE.jar
  • mvn clean install CODICE -P -> WS-client-PROD.jar

c'è una proprietà esperto di qualche parte non riesco a trovare? Vorrei evitare l'uso di un argomento ridondante della riga di comando, se possibile (es. - 'mvn clean install -P DEV -Dlane = DEV').

Ecco la mia configurazione del plugin di montaggio:

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

risposta

9

Simile a Bhaskar ma leggermente modificato.

Dopo la <accumulo> tag, aggiungere

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

È possibile impostare il valore corsia come una proprietà nel profilo.

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

quindi eseguire la build come dici tu: mvn ... -P DEV (ad esempio mvn installazione pulita -P DEV)

+0

Fantastico, ha funzionato magnificamente! – chadmaughan

+0

Il finalName non funzionerà sulla risorsa distribuita solo sulla risorsa che è memorizzata nella cartella di destinazione nella tua corsa corrente. – khmarbaise

+0

@khmarbaise - Corretto. Per questo particolare utilizzo, il jar viene distribuito all'esterno di un repository (lo so, non ideale). Volevo un'indicazione visiva in modo tale che il consumatore "non esperto" sappia quale corsia e proprietà sta usando semplicemente dando un'occhiata al file jar sul suo classpath. – chadmaughan

2

Dopo la <accumulo> tag, aggiungere

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

e impostare la "corsia" variabile ENV al nome del profilo per esempio

mvn -P DEV -Dlane = DEV ecc

Oppure si può essere un po 'più creativo e scoprire l'ID del profilo attivo, come descritto qui Maven - Can I reference profile id in profile definition?

EDIT ------

Se si desidera evitare argomenti ridondanti.

Perché non attivare i profili corrispondenti utilizzando l'env. proprietà.

così via riga di comando

mvn -Dlane=DEV|STAGE|PROD 

e nel pom

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

e lo stesso per i profili STAGE e prod.

+0

Grazie per la risposta.Volevo evitare di utilizzare un argomento ridondante della riga di comando, se possibile (ho aggiornato la mia domanda per riflettere questo). Il tuo link fornito è interessante. Qualche idea su come fare riferimento alla linea di comando specificata (attiva) profilo tramite una proprietà mvn? – chadmaughan

+0

Modificato con ulteriori informazioni su come evitare la ridondanza –