Attribut | Beschreibung | Verlangt |
---|---|---|
targetDir | Verzeichnis wo das Java Source File kreiert werden soll (siehe Hinweise) | Ja |
className | Name der erzeugten Klasse, z.B. AppReleaseInfo | Ja |
packageName | Name des Package | Nein |
buildNumFile | Filepfad für Buildnumber-File (siehe Hinweise) | Nein |
buildNumIncrement | Increment für die Buildnumber (Default ist 1) | Nein |
buildNumProperty | Property Name für die Buildnumber | Nein |
project | Names des Projekts/Produkts (auch verwendet in der Viewer Titelleiste) | Nein |
version | Version des Projekts/Produkts (auch verwendet in der Viewer Titelleiste) | Nein |
withViewer | Einbettung von Code für Swing-Viewer (true/false=default) | Nein |
Mit eingebetteten <Parameter>
Elementen können beliebige weitere Felder (und damit Methoden) im JReleaseInfo file
definiert werden. Parameter ist ein
Ant-eigener Typ mit den Attributen: name, type, value
Attribut | Beschreibung | Verlangt |
---|---|---|
name | Name der Eigenschaft | Ja |
value | Wert der Eigenschaft | Ja |
type | Typ der Eigenschaft (momentan: String, int, boolean, Integer, Boolean) String ist Default | Nein |
Als erstes wird der neue Task mit "taskdef" bekanntgemacht. Das Attribut "name" definiert unter welchem Namen
der Task aufgerufen werden kann, "classname" bestimmt welche Klasse im Archivefile jreleaseinfo-1.3.0.jar von
Ant verwendet werden soll und "location" im <classpath> Element gibt bekannt, wo sich das Java Archive
jreleaseinfo-1.3.0.jar befindet.
Achtung, wenn Sie ein Property wie hier ${lib.dir} verwenden und dieses z.B. im Initialisierungs-Target definiert
wird, stellen Sie sicher, dass dieses schon ausgeführt wurde.
Packen Sie z.B. die Task-Definition in ein Target welches vom Initialisierungs-Target abhängig
ist.
<taskdef name="jreleaseinfo" classname="ch.oscg.jreleaseinfo.anttask.JReleaseInfoAntTask" classpath="${lib.dir}/jreleaseinfo-1.3.0.jar" />
<jreleaseinfo targetDir="${basedir}/src/java" className="MyReleaseInfo" />
Bei der Ausführung wird die Datei MyReleaseInfo.java ohne Packagedeklaration mit einer einzigen Methode im Verzeichnis src/java erzeugt:
final public static Date getBuildDate();
Das folgende Beispiel liefert ein Build-Nummer, welche automatisch angepasst wird, sowie Getter-Methoden für Version, Revision und einige Zustandsflags.
<jreleaseinfo className="MyReleaseInfo" packageName="com.mypack" targetDir="${basedir}/src/java" project="MyProject" version="1.3" withViewer="true" buildNumFile="${basedir}/buildnum.properties" buildNumProperty="buildnum" > <parameter name="VersionNum" type="int" value="1" /> <parameter name="RevisionNum" type="Integer" value="3" /> <parameter name="Debug" type="boolean" value="false" /> <parameter name="Open" type="Boolean" value="true" /> </jreleaseinfo>
Bei der Ausführung wird die Datei MyReleaseInfo.java mit der Packagedeklaration com.mypack mit folgenden Methoden und einem eingebetteten Viewer im Verzeichnis src/java erzeugt:
final public static Date getBuildDate(); final public static String getProject(); final public static String getVersion(); final public static int getBuildNumber(); final public static int getVersionNum(); final public static Integer getRevisionNum(); final public static boolean isDebug(); final public static Boolean isOpen(); public static void main(String[] args);
buildNumFile (optional)
Wenn dieses Attribut gesetzt ist, wird eine fortlaufende Build-Nummer eingebettet.
Die Build-Nummer wird im "buildNumFile" gespeichert, damit sie als Grundlage
für den nächsten Build verwendet werden kann. Wenn das im Attribut "buildNumFile"
angegebene File noch nicht existiert, wird es erzeugt und die BuildNumber auf 1
gesetzt.
buildNumIncrement (optional)
Mit Hilfe dieses Attribut kann das Increment gesetzt werden. Normalerweise (und auch
per Default) ist das Increment 1. Wenn für Subprojekte auf ein einziges BuildNumFile zugegriffen
wird, ist es aber erwünscht, dass alle dieselbe BuildNumber erhalten. Also wird dort das
Increment auf 0 gesetzt.
buildNumProperty (optional)
Wenn dieses Attribut gesetzt ist, kann über den definierten Namen in Ant auf
die Build-Nummer zugegriffen werden. Also im gezeigten Fall:
<echo message="Build-Number: ${buildnum}" />
Wenn dieses Attribut auf "true" gesetzt ist, wird eine Viewerklasse eingebaut. Dann kann das erzeugt ReleaseInfoFile als Main-Class einer jar Datei definiert werden. So ist es möglich, die Release Informationen in einem Fenster darzustellen.
Beim Aufruf des JReleaseInfo AntTasks wird jedesmal eine neue Source Datei erstellt. Im Beispiel soll beim Erstellen eines neuen Releases ein neues MyReleaseInfo.java erstellt werden. Deshalb wurde das release-Target vom update_jreleaseinfo-Target abhängig gemacht
<!-- ================================================================ --> <!-- JReleaseInfo --> <!-- ================================================================ --> <target name="update_jreleaseinfo" depends="init"> <echo message="creating JReleaseInfo File in ${src.dir}" /> <taskdef name="jreleaseinfo" classname="ch.oscg.jreleaseinfo.anttask.JReleaseInfoAntTask" classpath="${lib.dir}/jreleaseinfo-1.3.0.jar" /> <jreleaseinfo className="MyReleaseInfo" packageName="${packagename}" targetDir="${src.dir}/java" project="${project}" version="${version}" withViewer="true" buildNumFile="${basedir}/buildnum.properties" buildNumProperty="buildnum" > <parameter name="company" value="${company}"/> <parameter name="buildTimeStamp" value="${tstamp_build}" /> <parameter name="home" value="${web}" /> <parameter name="mail" value="${mail}" /> <parameter name="copyright" value="${copyright}"/> </jreleaseinfo> <echo message="The current build number is ${buildnum}" /> </target> <!-- ================================================================ --> <!-- Jar --> <!-- ================================================================ --> <target name="jar" depends="init"> ... <jar jarfile="${build.dir}/${project}-${version}.jar"> <manifest> <attribute name="Main-class" value="${packagename}.MyReleaseInfo"/> </manifest> ... </jar> </target> <!-- ================================================================ --> <!-- Release --> <!-- ================================================================ --> <target name="release" depends="clean, update_jreleaseinfo, jar"> ... </target>
Bei der Definition von Pfaden (bei TargetDir und BuildNumFile) sollten keine relativen Angaben verwendet werden. Setzen Sie die Ant-Variable ${basedir} ein oder geben Sie einen vollständigen Pfad an.
Wir haben ein kleines Demo-Projekt mitgepackt, das im wesentlichen aus nichts anderem als der ReleaseInfo-Klasse besteht.
Das Target show_info im Ant-Buildfile demo_build führt folgende Schritte aus:
C:\proj\oscg\jreleaseinfo>ant -f demo_build.xml show_info Buildfile: demo_build.xml init: clean: [delete] Deleting directory C:\proj\oscg\jreleaseinfo\demo update_jreleaseinfo: [echo] creating JReleaseInfo File in C:\proj\oscg\jreleaseinfo/demo/src [echo] The current build number is 12 compile: [mkdir] Created dir: C:\proj\oscg\jreleaseinfo\demo\classes [javac] Compiling 1 source file to C:\proj\oscg\jreleaseinfo\demo\classes jar: [jar] Building jar: C:\proj\oscg\jreleaseinfo\demo\jreleaseinfo_demo-1.0.0.jar release: show_info: BUILD SUCCESSFUL
Als Resultat erscheint das schon bekannte Viewer-Fenster: