2012-07-17 9 views
13

Ho lavorato con un progetto simile al progetto described here. Quindi, ha un paio di moduli in pom.xml genitore:Come automatizzare il processo di aggiornamento del numero di versione per il mio plug-in Eclipse creato con Maven

<modules> 
    <module>../de.vogella.tycho.plugin</module> 
    <module>../de.vogella.tycho.feature</module> 
    <module>../de.vogella.tycho.p2updatesite</module> 
</modules> 

Questi moduli hanno un numero generale di versione per esempio 1.0.0-SNAPSHOT o senza -SNAPSHOT. Il file Feature.xml deve contenere lo stesso numero di versione:

<feature 
     id="com.my.feature" 
     label="My plugin feature" 
     version="1.0.0"> 

e:

<plugin 
     id="com.my.plugin" 
     download-size="0" 
     install-size="0" 
     version="1.0.0" 
     unpack="false"/> 

Il file category.xml (in progetti p2 update-sito) e MANIFEST.MF (in progetti di plugin) devono contenere lo stesso valore.

La domanda è: come automatizzare il processo di aggiornamento del numero di versione in tutti questi file utilizzando Maven?

Ho provato a risolvere questo problema utilizzando maven-release-plugin e maven-versions-plugin. Il primo plugin fa molte azioni inutilizzate (come fare un sacco di commit del CVS, che non uso in questo progetto). Il secondo plugin apporta solo modifiche nei file pom.xml e non modifica feature.xml, category.xml e MANIFEST.MF, o l'ho usato non così bene.

+2

Dove si trovano i file che devono essere aggiornati? Stai pensando al filtraggio di quei file? – khmarbaise

risposta

20

C'è uno speciale tycho-versions-plugin esattamente per questo problema. Esso (intenzionalmente) fa lo stesso del plugin-versioni-maven, ma aggiorna anche le versioni (ridondanti) in feature.xml e MANIFEST.MF.

Inoltre, il plug-in aggiorna anche i riferimenti che specificano una versione esatta, come i riferimenti ai plug-in in un file feature.xml o riferimenti a feature in un category.xml. Quindi, alla fine, tutte le occorrenze delle versioni degli artefatti vengono aggiornate, come in un refactoring.

Per i riferimenti con versioni esatte, esiste anche un aggiornamento automatico durante la normale creazione di Tycho. Quindi, se ad es. la tua funzione fa riferimento al plug-in nella versione 1.0.0.qualifier, questa stringa di versione viene aggiornata con il valore effettivo del qualificatore, ad es. 1.0.0.201207171147. È possibile utilizzare questa funzionalità per ridurre al minimo il numero di posizioni che devono essere aggiornate dal plugin tycho-versions: invece di specificare la versione corrente letterale nel riferimento, è possibile utilizzare la versione magica 0.0.0. Anche questa versione viene automaticamente aggiornata alla versione più recente come parte della normale build.

+0

Completamente d'accordo +1 –

9

vorrei aggiungere alcuni consigli pratici per gli utenti meno esperti Maven come me per Tobias Oberlies 'risposta:

L'obiettivo tycho-versions:set-version cambierà la versione di tutti i progetti a cui fa riferimento dal master pom. Le stringhe di versione dei file di configurazione di Maven (pom.xml) nonché i rispettivi artefatti di Eclipse/OSGi (MANIFEST.MF, feture.xml, category.xml) verranno costantemente cambiate.

Per eseguire in porta da riga di comando utilizzare il seguente:

mvn org.eclipse.tycho:tycho-versions-plugin:set-version -DnewVersion=1.2.0-SNAPSHOT 

La proprietà newVersion utente, 1.2.0-SNAPSHOT in questo esempio, è la nuova versione da impostare.

La riga di comando sopra utilizzerà la versione più recente di tycho-versions-plugin.Se è necessario utilizzare una determinata versione del plug-in, è necessario aggiungere tycho-version-plugin alla sezione project/build/plugins della finestra principale.

<plugin> 
    <groupId>org.eclipse.tycho</groupId> 
    <artifactId>tycho-versions-plugin</artifactId> 
    <version>${tycho-version}</version> 
</plugin> 

Sostituire ${tycho-version} con la versione corrente di Tycho o definire una proprietà con quel nome e il valore appropriato.

+0

Perché dovresti definire la nuova versione in POM? – oberlies

+0

Grazie per il suggerimento. Dandogli un secondo pensiero, probabilmente hai ragione nel dire che è molto improbabile che qualcuno voglia _store_ la nuova versione nel file pom. –

+0

Grazie! Funziona come un fascino! –