Buildmanagement mit Gradle

Gradle schickt sich an, die beiden Buildmanagement-Schwergewichte in der Java-Welt – Ant und Maven – zu beerben. Ganz neu ist Gradle nicht mehr, allerdings steht nach drei Jahren intensiver Entwicklungsarbeit das Release 1.0 kurz bevor. Und schon mit den Pre-1.0-Releases konnte man stabil arbeiten. Nicht umsonst haben einige größere Opensource-Projekte mittlerweile ihr Buildmanagement auf Gradle umgestellt, unter anderem Hibernate.

Gradle ist in Java geschrieben und verwendet für die Build-Konfigurationsskripte eine ausdrucksstarke Groovy-DSL (Domain Specific Language). Es vereint die Vorteile von Ant und Maven. Durch Convention over Configuration und die Verwendung von Plugins, kann man mit wenigen Zeilen komplexe Buildmanagement-Aufgaben erledigen. Ähnlich wie bei Ant bekommt man aber auch die Möglichkeit seinen Build-Prozess einfach um spezielle Anforderungen zu erweitern, durch Groovy als Skriptsprache sogar um einiges flexibler und lesbarer. Natürlich besitzt Gradle auch ein Dependency-Management, um Abhängigkeiten zum Beispiel gegenüber beliebigen Maven-Repositories aufzulösen.

Gradles Build-Konfigurationsskripte bestehen in erster Linie aus den Elementen Projekt, Task und Action. Erweitert werden können sie durch Plugins. Zu beachten ist, dass der Gradle Task dem Ant-Target entspricht aber noch deutlich flexibler ist. Apropos Ant, dank des in Groovy integrierten AntBuilder, können ganz einfach Ant-Tasks aufgerufen werden. Man hat damit Zugriff auf eine große Menge stabiler Funktionen, die seit vielen Jahren im Einsatz von Ant erprobt sind.

Zum Abschluß dieses Beitrages wollen wir uns noch ein einfaches Gradle-Skript anschauen.

task foobar << {
    println 'foo'
}
foobar.doLast {
    println "bar"
}

task callAnt << {
    String greeting = 'Hello from Ant'
    ant.echo(message: greeting)

    ant.taskdef(name:'groovy', classname:'org.codehaus.groovy.ant.Groovy') {
		classpath {
			fileset dir: 'path/to/groovy-all.jar', includes:'*.jar'
		}
	}
    ant.groovy "println 'Hello from Groovy from Ant'"
}
&#91;/sourcecode&#93;

In den Zeilen 1 bis 3 wird ein ein Task namens "foobar" definiert, der in einer Closure gekapselte Anweisungen ausführen kann. Dort ist beliebiger Groovy Code erlaubt, also zum Beispiel auch Schleifen und Bedingungen. In Zeile 5 bis 7 wird dem Task eine weitere Anweisung als Closure angehängt. Ruft man den Task "foobar" auf, erhält man folgende Ausgabe (-q unterdrückt Gradle spezifische Logmeldungen):

&#91;sourcecode gutter="false"&#93;
>gradle -q foobar
foo
bar

Ab Zeile 8 wird ein weiterer Task namens “callAnt” definiert, der mittels des AntBuilders den Ant-Task “echo” aufruft. Weiterhin wird mit ant.groovy ein Groovy-Skript von Ant aus Gradle aufgerufen.

Diese einfache Beispiel sollte einen kleinen Eindruck von Gradles Mächtigkeit vermitteln. Mehr Beispiele folgen demnächst in weiteren Blogeinträgen. Zu empfehlen ist auch die sehr gute Referenz Dokumentation.

Short URL for this post: https://wp.me/p4nxik-sg
This entry was posted in Build, config and deploy and tagged , , , . Bookmark the permalink.

Leave a Reply