Gradle mit Ant, am Beispiel von XMLBeans

Wer heute ein Projekt hat, welches komplett auf Ant Skripten basiert, der kann trotzdem über einen Wechsel nach Gradle nachdenken. Zumindest sieht man dies im Gradle Lager so. Gradle hat nämlich Integrationen für Ant und Maven. Daher bekommt man beispielsweise auch die aktuell verwendete Ant Version angezeigt, wenn man gradle -v ausführt.

------------------------------------------------------------
Gradle 1.4
------------------------------------------------------------

Gradle build time: Montag, 28. Januar 2013 03:42 Uhr UTC
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.8.4 compiled on May 22 2012
Ivy: 2.2.0
JVM: 1.7.0_17 (Oracle Corporation 23.7-b01)
OS: Mac OS X 10.8.3 x86_64

Im Gradle Skript kann man auf Ant Tasks verweisen, bzw. Ant Befehle ausführen. Hierzu ein Beispiel, wie man ein Ant Taskdef in Gradle verwendet, mit Apache XML Beans. XML Beans ist eine JAXB Implementierung.

Als erstes das Beispiel, wie eine Ant Umsetzung aussehen würde.

build.xml:

<project default="main" basedir=".">
  <taskdef name="xmlbean" 
      classname="org.apache.xmlbeans.impl.tool.XMLBean" 
      classpath="lib/xbean.jar"/>
	
  <target name="main" >
  	<xmlbean schema="xsd/XMLBeispiel.xsd" 
             destfile="genlib/XMLBeispiel.jar" 
             classpath="lib/xbean.jar"/>
  </target>
</project>

In diesem Beispiel wird als erstes via taskdef ein neues Ant „Element“ geschaffen, welches im Target „main“ verwendet wird. Im Attribute schema wird das zu grundeliegende XML Schema definiert, auf dessen Basis Java Klassen erstellt werden sollen. Mit destfile wird das anzulegenede JAR definiert.
Damit dies alles wirklich funktioniert, muss man sich natürlich darum kümmern, dass die Entsprechenden XML-Beans Library Dateien im lib Verzeichnis liegen, dies kann man mit Gradle einfacher lösen.

Mit Gradle kann man auf das Maven Repository zugreifen, um sich die entsprechenden Libs direkt und ohne weiteres zutun herunterzuladen. Im Maven Repository bekommt man auch angezeigt, welche Notation man für Gradle verwenden muss, um es in sein build einzubinden.

build.gradle:

repositories {
	mavenCentral()
}

dependencies {
    xmlbeans 'org.apache.xmlbeans:xmlbeans:2.5.0'
}

configurations {
    xmlbeans
}

task main {
	ant.taskdef(name: 'xmlbean', classname: 'org.apache.xmlbeans.impl.tool.XMLBean',
		classpath: configurations.xmlbeans.asPath)
	ant.xmlbean(schema: 'src/main/schemas/XMLBeispiel.xsd', 
		destfile: "build/libs/XMLBeispiel.jar",
		classpath: configurations.xmlbeans.asPath)
}

Oben begonnen, repositories{ } ist der Bereich in welchem die Quellen für Abhängigkeiten gesucht werden. Hier wird das oben bereits erwähnte Maven Repository verwendet, was durch den Teil mavenCentral() erreicht wird. Da man sich schon mal auf die Quelle festgelegt hat, folgt nun der Bereich dependencies, welcher spezifiziert, welche abhängige Library eingebunden werden soll. In dem Beispiel wird xmlbeans verwendet, in der Version 2.5.0. Der Name ist dabei nicht vorgegeben, man hätte auch „Hans“ verwenden können, wäre aber sicherlich nicht so sprechend gewesen. Der hintere Teil, zwischen den einfachen Einführungszeichen, wird dem Maven Repository entnommen.

Im configurations Abschnitt, wird xmlbeans als Konfigurationselement definiert, damit es verwendet werden kann und man darauf verweisen kann.

main ist ein selbst definierter Taskname, den man von der Kommandozeile aufrufen kann, vergleichbar mit einem „Target“ in Ant. Hier erfolgt der Zugriff auf die Ant „Schreibweise“. ant.taskdef ist identisch zum obigen taskdef im Ant Skript, Attribute im Ant werden dabei einfach mit identischem Namen verwendet wie im Ant-build, name="xmlbean" wird bei Gradle zu name : 'xmlbean'. Und die Attribute sind durch Komma getrennt. Im Attribute classpath gibt es allerdings hier eine Veränderung, im Gegensatz zur Ant Version, wird hier auf die XML Beans Library, die unter configuration definiert wurde, verlinkt – configurations.xmlbeans.asPath.
Das Ausführen des xmlbean Task ist entsprechend.

Ein Gedanke zu „Gradle mit Ant, am Beispiel von XMLBeans“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.