Ant Task

JReleaseInfo Task

Parameter

AttributBeschreibungVerlangt
targetDirVerzeichnis wo das Java Source File kreiert werden soll (siehe Hinweise)Ja
classNameName der erzeugten Klasse, z.B. AppReleaseInfoJa
packageNameName des PackageNein
buildNumFileFilepfad für Buildnumber-File (siehe Hinweise)Nein
buildNumIncrementIncrement für die Buildnumber (Default ist 1)Nein
buildNumPropertyProperty Name für die BuildnumberNein
projectNames des Projekts/Produkts (auch verwendet in der Viewer Titelleiste)Nein
versionVersion des Projekts/Produkts (auch verwendet in der Viewer Titelleiste)Nein
withViewerEinbettung von Code für Swing-Viewer (true/false=default)Nein

Eingebettete Elemente

Parameter

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

AttributBeschreibungVerlangt
nameName der EigenschaftJa
valueWert der EigenschaftJa
typeTyp der Eigenschaft (momentan: String, int, boolean, Integer, Boolean) String ist DefaultNein

Beispiele

Definition des Tasks

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" />
            

Beispiel für minimale Definition

<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();
            

Beispiel für eine erweiterte Definition

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}" />
            

withViewer (optional)

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.

Beispiel für den Einbau in ein Ant-Build File

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>
            

Hinweise

Definitionen von Pfaden

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.

Demo-Projekt

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:

  • löscht ein vorhandenes Subverzeichnis demo
  • erstellt eine JReleaseInfo Sourcedatei mit neuer BuildNumber
  • kompiliert die Sourcedatei
  • erstellt ein Jar-File
  • ruft die Main-Class im Jar-File auf
          
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:

JReleaseInfo-Viewer