2010-08-19 15 views
9

Prima di tutto, ho una sorta di comprensione che il seguente potrebbe non essere il modo generalmente accettato di fare le cose.Aggiornare una versione del progetto Maven dallo script

Abbiamo un progetto Maven 2 che ha un numero di versione che dovrebbe essere aggiornato ogni settimana o giù di lì, durante una nuova versione. Durante questo processo, ho cercato di eliminare tutte le cose che bisogna ricordare e ho creato uno script bash che gestisce il processo in modo interattivo.

Tuttavia, il mio problema è l'aggiornamento della versione pom dalla riga di comando. Posso farlo con sed, ma non penso che sia molto conveniente. Mi stavo chiedendo se ci sia un plugin Maven che sarebbe in grado di modificare il pom.xml direttamente dalla riga di comando. La versione è impostata nella sezione delle proprietà del pom. Sarebbe possibile scrivere un plugin che cambierebbe le proprietà?

Grazie in anticipo.

Aggiornamento

sembra che il mio problema era con le versioni progetto definito come proprietà (che sono stati applicati durante il filtraggio) che sembra ora un po 'stupido.

Una cosa che sto ancora cercando una risposta è come ottenere la versione di un certo progetto in modo affidabile alla riga di comando. Precedentemente avevo una proprietà "piuttosto unica" che utilizzavo con lo grep, ma ora l'elemento <version> non è univoco, in quanto nel progetto figlio ce ne sono almeno due. Avrei bisogno di una sorta di parser XML se Maven non avesse soluzioni, ma il mio obiettivo è rendere lo script il più indipendente possibile.

Non sono sicuro di aver creato una nuova domanda da questo, ma non l'ho fatto. Ottenere la versione è strettamente correlata all'impostazione della versione.

risposta

13

Mi chiedevo se c'è un plug in maven che sarebbe in grado di modificare pom.xml direttamente dalla riga di comando.

Il Versions Maven Plugin può fare questo. Controllare il seguente obiettivo:

  • versions:set può essere utilizzato per impostare la versione del progetto dalla riga di comando, aggiornando i dettagli di tutti i moduli del bambino, se necessario.
+0

Grazie! Ho trovato il plugin da solo ma in qualche modo ho perso il fatto che il plugin può effettivamente aggiornare pom.xml e non solo visualizzare le dipendenze e così via. L'impostazione della versione non funziona poiché la versione è definita nel padre pom come una proprietà, cosa che non mi ero accorto di menzionare. Tuttavia, ho trovato che c'è un obiettivo "aggiornamento-proprietà" che potrebbe fare il trucco. – mkko

+0

Apparentemente "update-properties" è solo per aggiornare le dipendenze e non impostare alcun valore. "versions: set" è la corrispondenza più vicina, ma sembra che non ci sia modo di definire la versione nel genitore pom in questo modo - o almeno come una proprietà. – mkko

+0

@mkko: 1. In realtà ** devi ** codificare la versione nel POM padre e negli elementi '' dei moduli figlio, vedere [MNG-624] (http://jira.codehaus.org/browse/MNG-624) per discussioni esaurienti su questo argomento 2. Le dipendenze dovrebbero usare la proprietà built in $ {project.version} ', non esiste un motivo valido per usare una proprietà per la versione. È così che funziona con Maven. 3. E poi sarai in grado di usare 'versions: set' (ma questa è una conseguenza indiretta di come sistemare le cose). –

1

Da Maven POM reference:

env.X: "ENV" Preporre una variabile con restituirà la variabile di ambiente della shell. Ad esempio, $ {env.PATH} contiene la variabile di ambiente PATH . Nota: mentre le variabili di ambiente sono case-insensitive su Windows, la ricerca delle proprietà fa distinzione tra maiuscole e minuscole. In altre parole, mentre la shell di Windows restituisce lo stesso valore per% PATH% e% Path%, Maven distingue tra $ {env.PATH} e $ {env.Path}. A partire da Maven 2.1.0, i nomi delle variabili dell'ambiente sono normalizzati per tutte le maiuscole per l'affidabilità .

Ciò significa che si può avere una variabile d'ambiente come $ MYMAVENPROJECTVERSION e leggerlo come questo:

<version>${env.MYMAVENPROJECTVERSION}</version> 

È possibile aggiornare questa variabile di ambiente ogni settimana, prima di eseguire build.

Spero che questo ti possa aiutare.

+2

Questo non funzionerà con build multi-moduli (è ** necessario ** codificare la versione nell'elemento ''). –

+0

Che cosa significa? Non è possibile utilizzare i segnaposto nella sezione principale? è un bug? – sourcerebels

+1

Esattamente, non è possibile utilizzare i segnaposti nella sezione principale. È di design. La versione meno genitore sarà consentita in Maven 3.1. Vedi http://jira.codehaus.org/browse/MNG-624 e tutti i problemi correlati per interessanti discussioni su questo argomento. –

Problemi correlati