Subversion mit Ant automatisieren

Posted October 30, 2007

So gut wie jedes kleinere oder größere Projekt nutzt irgendeine Form der Versionskontrolle, wie beispielsweise Subversion oder CVS. Dabei ist allerdings darauf zu achten, dass die Änderungen, die man am Code vornimmt, auch in sehr regelmäßigen Abständen mit dem Repository synchronisiert werden. Man kann entweder von Hand immer wieder den Commit und Checkout starten, man kann sich durch GUI-Werkzeuge dabei helfen lassen, wie beispielsweise mit Subclipse für die Eclipse IDE oder mit TortoiseCVS oder aber man automatisiert diesen Vorgang einfach, indem man innerhalb eines Ant-Buildfiles diesen Vorgang startet.

Dazu muss man sich SvnAnt herunterladen (das sind nur 182 KB). Und dann kopiert man die Dateien svnant.jar, svnClientAdapter.jar und svnjavahl.jar in den (typischen) /lib -Ordner des Projekts. Wenn das Projekt bereits mit Subversion verwaltet wird, dann sind alle nötigen Informationen für svnAnt bereits vorhanden und die Benutzung kann in wenigen Zeilen in dem Ant-Buildfile geschehen. Die Task-Def ist durch ein bereits in die svnant.jar integrietes Property-File besonders einfach.

In diesem Beispiel kann zwar immer 'ausgecheckt' werden, allerdings findet das 'Einchecken' (commit) nur bei erfolgreichen Test-Durchlauf statt. Das ist vielleicht ganz sinnvoll, damit kein kaputter Code ins Repository gelangt. Wenn man sehr gerne Releases publiziert, dann kann man natürlich auch wunderbar eine binäre Distribution seines Projekts mit zugehöriger Versions- oder Revisions-Nummer einchecken. Auf diese Weise kann dann auf der möglicherweise auf der Website des Projekts immer ein Nightly-Build angegeben werden, ohne dass dafür besondere Software (wie beispielsweise CruiseControl) auf dem Server installiert sein muss.

<taskdef resource="svntask.properties" classpathref="ProjectLib.classpath"/>
 
<target name="checkout">
    <svn>
        <update dir="src" />
    </svn>
</target>
 
<target name="checkin" depends="checkout, test">
    <svn>
        <commit message="Automatic Checkin" dir="src" />
    </svn>
</target>

(originally posted on 2007-10-31)