Gradle – Eclipse Howto

Das Groovy basierte Buildtool Gradle ist mittlerweile in Eclipse integriert, doch gerade das Auflösen von Abhängigkeiten zu externen Bibliotheken erschließt sich einem nicht sofort – ein Grund für mich mal etwas dazu schreiben.

Doch erst einmal zu meinen grundsätzlichen Anforderungen an ein Buildtool:

  • Auflösen von Abhängigkeiten zu externen Bibliotheken in Eclipse
  • Erstellen einer ausführbaren jar Datei
  • Ausführen aller in Groovy geschriebenen Junit Tests
  • erstellen einer zip Datei, die sowohl das eigene jar, als auch die verwendeten externen Bibliotheken enthält

Die Struktur des Beispielprojekts sieht so aus:

├── build.gradle
├── settings.gradle
└── src
    ├── main
    │   └── java
    │       └── de
    │           └── koo
    │               └── gradle
    │                   ├── Logger.java
    │                   └── Main.java
    └── test
        └── groovy
            └── de
                └── koo
                    └── test
                        └── gradle
                            └── LoggerTest.groovy

 

Die Logger Klasse verwendet intern die apache commons logging Bibliothek und wird in der Main Klasse aufgerufen, die wiederum die Hauptklasse der ausführbaren jar Datei ist.
Das ist nicht sehr einfallsreich, sollte aber zum Test der Anforderungen ausreichen.

Installation

Aber starten wir erst einmal mit der Installation von Gradle. Entweder man erstellt in Eclipse ein Gradle Projekt und nutzt dabei den Gradle Wrapper oder man verwendet den Software Development Kit Manager sdkman. Ich habe mich für letzteres entschieden, da dies auch mein präferierter Ansatz ist um groovy und grails zu installieren. Nach einem sdk install gradle steht Gradle in der aktuellen Version auf der Kommandozeile zur Verfügung und wurde unter ~/.sdkman/candidates/gradle/current installiert.

Konfiguration

Die Konfiguration des Builds in der Datei build.gradle ist Groovy Code.

apply plugin : 'java'
apply plugin : 'groovy'
apply plugin : 'application'
apply plugin : 'eclipse'

repositories {
	mavenCentral()
}

sourceSets {
	main.java.srcDir 'src/main/java'
	test.groovy.srcDir 'src/test/groovy'
}

mainClassName = "de.koo.gradle.Main"

dependencies {
	compile group: 'commons-logging', name: 'commons-logging', version: '1.2'
	testCompile 'junit:junit:4.12'
	testCompile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.4.7'	
}

Bis auf die Closure Syntax (vergleichbar mit Lambdas in Java) sollte sie gut zu lesen sein.

Plugins und Tasks

Gradle selbst arbeitet mit Plugins, die zusätzliche Funktionalität vor allem durch tasks zur Verfügung stellen. Welche tasks Gradle über die Grundkonfiguration oder Plugins zu Verfügung stellt, listet der Befehl gradle tasks. Tasks lassen sich über den Befehl gradle taskname auführen.
Jedes Gradle basierte Java Projekt wird wahrscheinlich das java Plugin benutzen. Darüber werden tasks wie compileJava, jar oder javadoc bereitgestellt. Das in meinem Beispiel ebefalls verwendete groovy Plugin stellt analog dazu die tasks compileGroovy und groovydoc zur Verfügung.
Für die Zusammenarbeit mit Eclipse wird das eclipse Plugin verwendet. Über den eclipse task werden alle Projekt bezogenen Konfigurationsdateien (.project, .classpath, .settings/org.eclipse.jdt.core.prefs) für Eclipse generiert. Danach reicht ein refresh auf dem Projekt aus, um die Abhängigkeiten zu externen Bibliotheken aufzulösen.
Über den distZip task des application Plugins erstellt man letztendlich ein zip Archiv, das die komplette Applikation inklusive der verwendeten externen Bibliotheken enthält. Und als Sahnehäubchen oben drauf werden auch gleich noch Startskripte für Windows und Linux/Unix erstellt. Verpflichtend dafür ist die Angabe der Hauptklasse.

Repositories

Repositories sind die Quellen für externe Biblotheken, aus denen man sich bedienen darf. Das zentrale Maven 2 Repository kann man über die Methode mavenCentral() einbinden. Über die flatDir Direktive kann man Bibliotheken aus lokalen Verzeichnissen einbinden.

flatDir {
	dirs ‘lib'
}

Weitere Möglichkeiten kann man aus der online Doku entnehmen.

Source Sets

Source Sets sind vergleichbar mit Source Foldern in Eclipse. Es gibt für Sourcen und Testfälle getrennte Direktiven, die man zusätzlich auch noch in Java und Groovy Code unterteilen kann.

Dependencies

Die Abhängigkeiten zu externen Bibliotheken konfiguriert man in der dependencies Sektion. Am einfachsten sucht man auf mvnrepository.com nach der gewünschten Bibliothek und kopiert sich das Gradle Snippet in seine build.gradle.

Fazit

Gradle und Eclipse harmonieren hervorragend miteinander. Voraussetzung dafür ist die Nutzung des Gradle Eclipse Plugins. Die mit Eclipse ausgelieferte Gradle Integration bringt zusätzliche Views aber erst einmal keine Auflösung von Abhängigkeiten zu externen Bibliotheken, wie z.B. die Ivy Integration.
Dafür bekommt man ein modernes Buildwerkzeug mit Groovy Konfiguration, das einem durch Plugins jede Menge Arbeit abnimmt.

Links

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit deinem WordPress.com-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

%d Bloggern gefällt das: