2011-11-23 8 views
27

Ho un progetto che compilo con Maven. Ho diversi profili dichiarati in pom.xml. Per alcuni di questi profili, preferisco costruire una guerra, e per altri profili preferisco un barattolo. Io uso per modificare manualmente il file pom.xml e cambiare variabile imballaggio a unoModifica della confezione in base al profilo attivo in pom

<packaging>war</packaging> 

o

<packaging>jar</packaging> 

prima di fare un

$ mvn clean package -Pchosenprofile 

Come posso dire MVN la confezione corrispondente alla ogni profilo quindi non ho bisogno di modificare pom.xml?

risposta

75

Se si desidera utilizzare il profilo si può usare qualcosa di simile a:

<?xml version="1.0" encoding="UTF-8"?> 
<project> 
    <modelVersion>4.0.0</modelVersion> 
    .. 
    <packaging>${packaging.type}</packaging> 

    <profiles> 
     <profile> 
      <id>webapp</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      <properties> 
       <packaging.type>war</packaging.type> 
      </properties> 
     </profile> 
     <profile> 
      <id>batch</id> 
      <properties> 
       <packaging.type>jar</packaging.type> 
      </properties> 
       </profile> 
      </profiles> 
</project> 
+8

Era così facile e così bello che mi ha fatto sorridere. Grazie, anche se è arrivato un anno in ritardo :). – matiasg

1

Non penso che tu possa.

due alternative mi viene in mente:

  • hanno due moduli separati per l'imballaggio, e chiamare uno di quelli a seconda del profilo
  • hanno il modulo in guerra e ottimizzare il ciclo di vita (inclusione/esclusione costruire passaggi) a seconda del profilo di produrre il vostro vaso o la vostra guerra

mi piace il secondo approccio migliore - un build server probabilmente costruire sia, e uno sviluppatore avrebbe usato la corretta profili/impostazioni di saltare il tipo indesiderato.

+0

Grazie. Mi piace l'approccio attachClasses perché è più semplice, ma potrei dover ricorrere a qualcosa di simile in una situazione più complessa. – matiasg

+0

attachClasses (o simili) è quello che avevo in mente per il proiettile 2 - fondamentalmente una guerra è un barattolo con cose extra - e Maven è perfettamente in grado di produrre entrambi allo stesso tempo – ptyx

4

Hai guardato l'impostazione di configurazione attachClasses del plugin war? Questa semplice impostazione ti permetterebbe di costruire sia un war che un jar (di default con il classificatore "classes") in una singola esecuzione di tipo Maven.

+0

Questo non è un wat che avevo in mente, ma in realtà risolve il mio problema ed è abbastanza facile. – matiasg

Problemi correlati