Při vývoji a zejména ladění našich aplikací jsme se setkali s potřebou přistupovat k SVN revizi v aplikaci. Tento článek obsahuje jednoduchý návod, jak nastavit, aby se SVN revize automaticky ukládala do konfiguračního souboru při každém buildu.

Pro získání čísla SVN revize projektu použijeme Build Number Maven Plugin. Požadavkem tohoto pluginu je mít nainstalované SVN a přidané v PATH (plugin využívá příkaz svn info). V následujícím příkladu si ukážeme, jak ukládat číslo revize do konfiguračního souboru config.properties při sestavování aplikace (mvn package). Z konfiguračního souboru potom můžeme číslo revize vkládat např. do e-mailu popisujících vzniklé chyby. Domovská stránka pluginu je zde.

Nastavení v pom.xml

Pro spravný běh pluginu je potřeba mít vyplněný scm provider:


<scm>
<developerconnection>scm:svn:https://</developerconnection>
</scm>

Uživatelské jméno, heslo a správnou url na repozitář je potřeba vyplnit pouze v případě, že pokud bychom chtěli využít kontrolu, zda nemáme nějaké lokálně modifikované soubory nebo automatický update před sestavením aplikace.

Definice pluginu:


<build>
<plugins>
<plugin>
<groupid>org.codehaus.mojo</groupid>
<artifactid>buildnumber-maven-plugin</artifactid>
<version>1.0-beta-2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<docheck>false</docheck>
<doupdate>false</doupdate>
</configuration>
</plugin>
</plugins>
</build>

Atribut doCheck zapíná kontrolu lokálně modifikovaných souborů, atribut doUpdate zapíná automatický update. Po tomto nastavení je revize aplikace dostupná v proměnné ${buildNumber}. Použitím mavenovského filtrování dostaneme toto číslo do konfiguračního souboru config.properties.

Nastaveni v config.properties:


application.revision=${buildNumber}

Zde je příklad doplnění revize do config.properties v produkčním profilu (mvn package -Pprodukce). Při použití filtrování si ovšem musíme dát pozor, jestli se nám v config.properties nechtěně nenahradí nějaká jiná proměnná (např. ${project.name}) a případně ji v projektu přejmenovat.


<profile>
<id>produkce</id>
<build>
<plugins>
<plugin>
<artifactid>maven-war-plugin</artifactid>
<configuration>
<webresources>
<resource>
<directory>${basedir}/src/produkce/config</directory>
<filtering>true</filtering>
<includes>
<include>config.properties</include>
</includes>
<excludes>
<exclude>*.xml</exclude>
</excludes>
<targetpath>WEB-INF</targetpath>
</resource>
</webresources>
</configuration>
<version>2.1-alpha-1</version>
</plugin>
</plugins>
</build>
</profile>

Aktualizováno na základě komentářů

Nastaveni buildnumber-maven-plugin

V nastaveni buildnumber-maven-plugin se musi nastavit useLastCommittedRevision na true, jinak se bere SVN revize z repozitory a ne z pouzite branche. Viz command ‚svn info‘.

Číslo revize pokud není dostupná revize ze SVN

Pokud není k dispozici SVN, stačí do konfigurace dopsat „pseudo“ číslo verze:



<configuration>
...
<revisiononscmfailure>NA</revisiononscmfailure>
</configuration>