2008-10-05 7 views
8

Beim Empfang eines Fehlerberichts oder einer it-doesnt-work-Nachricht ist eine meiner Initialfragen immer welche Version? Mit einer anderen Builds in vielen Phasen der Prüfung, Planung und Bereitstellung ist dies oft eine nicht-triviale Frage.Wie kann man die Versionsinformationen von Subversion in EARs speichern?

Wenn ich Java JAR - Dateien (ear, jar, rar, war) veröffentliche, möchte ich in/in JAR schauen und zu demselben Zweig, derselben Version oder demselben Tag wechseln, der die Quelle des veröffentlicht JAR.

Wie kann ich den amt build-Prozess am besten anpassen, so dass die Versionsinformationen im svn checkout im erstellten Build verbleiben?

Ich dachte nach dem Vorbild der:

  • eine VERSION-Datei hinzufügen, aber mit welchem ​​Inhalt?
  • Speichern von Informationen in der META-INF-Datei, aber unter welcher Eigenschaft mit welchem ​​Inhalt?
  • Kopierquellen in das Ergebnis Archiv
  • hinzugefügt svn: Eigenschaften zu allen Quellen mit Keywords in Orten der Compiler sie

ich den svnversion Ansatz endete Blätter sein (die akzeptierte anwser), weil es den gesamten Teilbaum im Gegensatz zu svn info scannt, der nur die aktuelle Datei/das aktuelle Verzeichnis betrachtet. Dazu habe ich die SVN-Aufgabe in der ant-Datei definiert, um sie portabler zu machen.

<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask"> 
    <classpath> 
    <pathelement location="${dir.lib}/ant/svnant.jar"/> 
    <pathelement location="${dir.lib}/ant/svnClientAdapter.jar"/> 
    <pathelement location="${dir.lib}/ant/svnkit.jar"/> 
    <pathelement location="${dir.lib}/ant/svnjavahl.jar"/> 
    </classpath>   
</taskdef> 

Nicht alle Builds führen zu Webservices. Die EAR-Datei vor der Bereitstellung muss aufgrund der Aktualisierung auf dem Anwendungsserver den gleichen Namen erhalten. Es ist immer noch eine Option, die Datei ausführbar zu machen, aber bis dahin habe ich nur eine Versionsinformationsdatei hinzugefügt.

<target name="version"> 
    <svn><wcVersion path="${dir.source}"/></svn> 
    <echo file="${dir.build}/VERSION">${revision.range}</echo> 
</target> 

Refs:
svnrevision: http://svnbook.red-bean.com/en/1.1/re57.html
svn info http://svnbook.red-bean.com/en/1.1/re13.html
subclipse svn Aufgabe: http://subclipse.tigris.org/svnant/svn.html
SVN-Client: http://svnkit.com/

+0

I SvnTask portabler als die Ausführung von "svnversion" wie in der angenommenen Antwort? –

Antwort

5

Verwenden Sie den svnversion Befehl in der Ant-Skript die Versionsnummer erhalten:

<exec executable="svnversion" outputproperty="svnversion" failonerror="true"> 
    <env key="path" value="/usr/bin"/> 
    <arg value="--no-newline" /> 
</exec> 

dann die $ verwenden {svnversion} Eigenschaft irgendwo in Ihrer EAR. Wir haben es in der EAR-Dateinamen, aber man konnte es auch innerhalb der EAR in einer Readme oder Versionsdatei setzen, oder geben Sie die Version in der EAR META-INF/manifest.mf:

<!-- myapp-r1234.ear --> 
<property name="ear" value="myapp-r${svnrevision}.ear" /> 
1

Von der Spitze meines Geistes. Ein Tag für jedes Glas bauen?

1

Wir haben den ersten Teil unserer Build erstellen Sie eine version.txt-Datei im Stammverzeichnis des Pakets und dump das Tag verwendet, um den Code aus (in unserem Fall) CVS zu überprüfen ... Darüber hinaus der letzte Teil von Bei unserem Build-Prozess wird die vollständig erstellte EAR-Datei zur späteren Verwendung in CVS zurückverfolgt.

Wenn wir ein Problem mit einer Webapp haben - es ist nur ein Fall, den Reporter zu bitten, /app/version.txt zu drücken - können wir von dort aus den jeweiligen Buildverlauf in CVS durchsuchen, um die relevanten Komponenten zu finden (behandelt verschiedene Versionen von Bibliotheken in Apps), um den Fehler zu finden.

Nicht sicher, wie viel Hilfe das für unsere Unterstützung Folk ist - aber es ist definitiv etwas, was sie beschweren nicht da sein!

4

Sie möchten die Subversion-Zweigstelle und die Repository-Nummer angeben.Wie in How to access the current Subversion build number? beschrieben, gibt Ihnen der Befehl svn info diese Informationen, die Sie dann verwenden können, um eine VERSION-Datei oder einen Platz in einer der anderen Dateien zu erstellen, die Sie in Ihre * AR-Dateien einbauen. Wenn Sie nichts anderes im Sinn haben, könnten Sie die XmlProperty Ant task mit berücksichtigen die relevanten Informationen aus dem Ausgang des svn   info   --xml Befehl zu extrahieren

1

automatische baut tun, und legen Sie einen Tag (mit einem Datum stempeln) auf der Codebasis, wenn der Build erfolgreich ist (mit unittest ofcourse).

Liefern Sie in Ihrem Übermittlungsprozess nur gekennzeichnete Builds an den Kunden. Auf diese Weise haben Sie die Kontrolle und können den Tag-Namen irgendwo in eine readme.txt platzieren oder den Dateinamen der Ear-Datei als Tag-Name angeben.

Ich persönlich wechselte zurück zu CVS, und das ist einer der Gründe. In CVS kann ich eine Klasse melden lassen. Alle meine JAR-Dateien enthalten eine "Hauptdatei", die sie lauffähig macht. Bei Supportfragen bitte ich den Kunden, ein "java -jar somejar.jar" zu machen und die Ausgabe neben der Frage an mich zu senden.

Auf diese Weise bin ich sicher, den Build, den sie verwenden, und ich kann sogar Informationen wie Java-Version, OS-Typ und Version haben. Ohne dass der Kunde seltsame Fragen beantworten muss.

Es ist einfach, aber sehr effektiv.

1

Warum schreiben Sie die Build-Nummer nicht in eine Eigenschaftendatei ... das kann dann einfach vom Java gelesen und in einer Hilfe | ausgegeben werden Über den Dialog (Applet/Anwendung), die Fußzeile der Webseite oder was auch immer für eine andere GUI Sie haben.

(siehe Fußzeile auf jeder Seite SOF .... hat die SVN-Versionsnummer gibt.)

eine Last leichter als die Suche in der WAR/EAR/JAR etc einfach Zeit zu sein scheint?

0

I Speichern Sie die absolute Repository-Revision als Teil meiner vollständigen Versionsnummer. Das gibt Leuten einen schnellen Blick, um zu sehen, ob eine gegebene Änderung in einer gegebenen Version ist oder nicht.

Wir speichern auch die Versionsnummer/Build-Datum/etc in der Manifest-Datei des Ohres als benutzerdefinierte Eigenschaften, diese sind meist nur informativ. Wir speichern sie auch in einer Eigenschaftendatei, die in unserem Jar enthalten ist, damit die Anwendung sie lesen kann.

3

Überprüfen Sie das Projekt jreleaseinfo. Enthält eine ANT-Task, die eine Java-Klasse generieren kann, die zur Laufzeit aufgerufen werden kann, um die Release-Informationen für Ihr Projekt anzuzeigen.

Ich mag seine Einfachheit.

Verwandte Themen