2012-01-18 14 views
5

Vedo domande come How to get revision number from subversion using maven? ma ci sono degli standard (defacto o altro) per i quali i campi effettivi da utilizzare nel manifest, per la versione # e per l'URL del repository (cioè, mostrando che si trova sul tronco rispetto a un ramo) ? Ho visto Implementation-Version utilizzata, con e senza una "r" leader (per la revisione), ho visto Implementation-Build: usato pure.Le migliori pratiche per incorporare il numero di versione SVN nel manifest jar Java?

modifica Ho rimosso il tag Maven, che non avrebbe dovuto essere lì. La mia domanda riguarda i contenuti del barattolo, non gli strumenti di per sé.

+0

Nessun standard di cui sono a conoscenza. Ogni azienda/sviluppatore sembra avere un'opinione su come gestire i numeri di revisione, non importa come registrare e descrivere quella revisione :-) –

+1

Si potrebbe voler considerare l'uso di un file diverso da (o almeno in aggiunta) il manifest se hai mai voluto leggere il numero di revisione programmaticamente. La lettura di MANIFEST.MF dall'interno della JVM è piuttosto un problema e può essere incoerente da un ambiente all'altro se la gerarchia del classloader cambia del tutto. –

+0

vedere anche: http://stackoverflow.com/questions/7670602/conventions-for-additional-content-of-the-manifest-mf-file –

risposta

2

Sfortunatamente, jar manifest non ha standard per la numerazione delle versioni.

Ma, in realtà, esiste un altro metodo standard per aggiornare automaticamente il numero di revisione. È possibile utilizzare svn:keywords per ottenere il numero di revisione corrente nei file dopo ogni commit. C'è la proprietà per la sostituzione di revisione e $HeadURL$ per la sostituzione dell'URL di repository. Hai solo bisogno di mettere seguente stringa nel file e posizionare il file sotto controllo di versione:

$Revision$ $HeadURL$ 

Se si crea manifesta al volo con Maven, mi sento di raccomandare di mettere seguente contenuto in version.properties del file:

revision=$Revision$ 
repourl=$HeadURL$ 

quindi includere in in pom.xml con la dichiarazione (Maven dovrebbe avere delle proprietà dei plugin abilitati):

<plugins> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>properties-maven-plugin</artifactId> 
    <version>1.0-alpha-1</version> 
    <executions> 
     <execution> 
     <phase>initialize</phase> 
     <goals> 
      <goal>read-project-properties</goal> 
     </goals> 
     <configuration> 
      <files> 
      <file>version.properties</file> 
      </files> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

E allora si sarà in grado di mettere il numero di revisione e dei pronti contro termine URL del manifesto:

<manifest> 
    <attribute name="Revision" value="${revision}" /> 
    <attribute name="Repository URL" value="${repourl}" /> 
</manifest> 

Si prega di notare, inoltre, che è necessario explicitly enable svn:keywords utilizzando le proprietà sovversione al fine di ottenere $Revision$ e $HeadURL$ sostituito nella vostra file con valori attuali. Se deciderai di utilizzare version.properties, dovrai eseguire il seguente comando:

svn propset svn:keywords Revision version.properties 
svn propset svn:keywords HeadURL version.properties 
+0

grazie, una correzione è che dovrebbe essere "Revision \ HeadURL" invece di "Id" nel propset. Tuttavia, quel $ Revision include solo la versione di version.properties (si veda: http://svnbook.red-bean.com/en/1.7/svn.advanced.props.special.keywords.html "where's globalrev") Tuttavia, $ HEURL $ non cambia spesso (a meno che non si cambi una sottodirectory). Quindi dovrei considerare l'utilizzo di HeadURL e non ignorare completamente le parole chiave. Grazie. –

+1

@Steven R. Loomis: hai ragione. Modificato – altern