Java Projekte bauen mit Gradle

Nach dem Apache Ant bisher meine erste Wahl war, wenn es darum ging ein Java Projekt zu bauen, habe ich mich die letzten Tage mit dem Quasi-Nachfolger Gradle beschäftigt.

Es ist wahrscheinlich geschmacksache, ob man eher ein XML oder ein DSL Dokument bevorzugt. Was ich derzeit bei der XML Variante noch etwas besser finde, ist die Möglichkeit vor dem build zu validieren ob die Struktur und die Elemente korrekt sind. Dies sehe ich bei der Gradle DSL noch nicht so einfach, sondern ich seh die Fehler erst, wenn ich den build starte (zumindest habe ich noch keinen Weg gefunden dies während des Tippen zu validieren).

Gradle ist, wie es in einem Buch dazu gelesen habe, die nächste Evolutionsstufe nach Ant und Maven. Die Begründung hierfür liegt daran, dass Gradle ein paar Dinge anders und „einfacher“ macht, als die gewohnten Java Build Tools. Aber um es einfacher zu machen, gibt es Vorgaben, die es bei Ant so nicht gab. Bei Ant war ich, als ersteller für die Struktur des Projektes zuständig. Ich habe definiert wo meine Quellen liegen und wohin die gebauten Artifakte geschrieben werden. Gradle nimmt einem, out of the box, diese Möglichkeit.
Klarer Vorteil, kenn ich ein Gradle Projekt, kenn ich alle. Ich muss mir keine Gedanken machen, wo die Quellen liegen und wohin die gebauten Elemente geschrieben werden. Java Quellen liegen immer unter src/main/java und die compilierten Klassen liegen unter build/classes/main. Mit dieser Vorgabe gelingt es mir mit einer Zeile ein Java build zu erzeugen.

Ein Beispiel

Angefangen wird mit der Installation von Gradle, einfach der beschriebenen Installation folgen (ZIP auspacken und gradle/bin zum Pfad hinzufügen).

Im nächsten Schritt legen wir ein Verzeichnis an „Beispiel„, in welchem wir das Projekt ablegen wollen. Darunter die oben bereits erwähnte Struktur src/main/java.
Da es ein einfaches Beispiel sein soll, legen wir nur im java Verzeichnis ein simples Java Programm an, welches das typische „Hallo Welt“ ausgibt.

GradleTest.java:

public class GradleTest {
	public static void main(String[] args) {
		System.out.println("Hallo Welt");
	}
}

Im Projektverzeichnis legen wir nun das einzeilige Buildskript an.

build.gradle:

apply plugin: 'java'

Dies war alles. In einem Terminal in das Verzeichnis „Beispiel“ wechseln und den Befehl gradle build aufrufen.

Das Ergebnis kann sich sehen lassen, mit einer einzigen Zeile im Buildskript, bekommt man die Java Klasse compiliert, ein JAR erzeugt und es würden Tests ausgeführt werden (wenn wir schon welche definiert hätten).

build
  - classes
    - main
      - GradleTest.class
  - dependency-cache
  - libs
    - Beispiel.jar
  - reports
    - tests
      - base-style.css
      - css3-pie-1.0beta3.htc
      - index.html
      - report.js
      - style.css
  - test-results
    - binary
      - test
        - result.bin
  - tmp
    - jar
      - MANIFEST.MF

Das zugehörige Ant Skript würde hier erheblich länger ausgefallen.
Wer zum Beispiel gerne noch die Versionsnummer im MANIFEST stehen hätte, kann so etwas auch sehr einfach durch Anpassungen im build.gradle Skript erreichen.

build.gradle:

apply plugin: 'java'

def myVersion = '1.0'

jar {
  manifest {
    attributes 'Implementation-Title': 'Mein Gradle Beispiel', 
               'Implementation-Version': myVersion
  }
}

def myVersion definiert hierbei eine Variable, auf die später wieder zugegriffen werden kann. Somit kann ich am Anfang meines Skripts Projekt Variablen definieren, die dann im Skript verwendet werden. Ähnlich den Proptery Elementen in Ant.
Im jar { } Block kann ich die Erstellung des JAR beeinflussen, da ich nur das Manifest beeinflussen wollte, habe ich auch entsprechend nur den Unterblock manifest { } verwendet.

Aber es geht noch „schöner“. Wenn ich die Version ebenso im JAR Dateinamen haben will (wie es bei den meisten Open Source Produkten der Fall ist), dann verwende ich das Schlüsselwort version. Also sieht mein Skript so aus:

build.gradle:

apply plugin: 'java'

version = '1.0'

jar {
  manifest {
    attributes 'Implementation-Title': 'Mein Gradle Beispiel', 
               'Implementation-Version': version
  }
}

Damit wird zum einen die Version in mein Manifest geschrieben und zeitgleich bekomme ich eine Datei „Beispiel-1.0.jar„.

Alles in allem macht die einen recht einfachen und durchdachten Eindruck, also vielleicht kann ich mit dem Autor des Gradle Buchs anschließen „die nächste Evolutionsstufe nach Ant und Maven“.

Schreibe einen Kommentar

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