Warum soll man ein Build Tool verwenden, um ein Eclipse Projekt zu erstellen, welches nur einmal erstellt wird? Arbeitet man mit mehreren Entwicklern, die vielleicht auch noch auf mehreren Plattformen (Linux, Windows, Mac OS X) unterwegs sind, möchte man vielleicht nicht die Eclipse Projekt Dateien in seiner Versionskontrolle hinterlegen. Aber man möchte sicherlich, dass jeder, bei der Erstellung des eigenen Eclipse Projektes, die identischen Rahmenbedingungen schafft. Es sollen die gleichen Quell und Ziel Verzeichnisse verwendet werden, die externen Library Versionen sollten auch zueinander passen.
Dies könnte also durchaus einen Sinn ergeben, warum man das Eclipse Projekt nicht nur einmal, sondern eben mehrmals erstellt und vielleicht aktualisiert, wenn neue Bibliotheken in das Projekt eingebunden werden.
Was muss man also machen, um mit Hilfe von Gradle solch eine Unterstützung zu erreichen.
Gradle arbeitet mit verschiedenen Plugins, diese werden einfach durch das Schlüsselwort apply
eingebunden, da gibt es auch ein entsprechendes für Eclipse, und da es sich um ein Java Projekt handeln soll, wird dieses Plugin auch gleich verwendet.
build.gradle:
apply plugin: 'java' apply plugin: 'eclipse'
Mit dem Aufruf gradle eclipse
werden die entsprechenden Eclipse Dateien angelegt
Ergebnis:
- .classpath - .project - .settings - org.eclipse.jdt.core.prefs
.classpath
Was direkt funktioniert ist das automatische Setzen des Quellverzeichnis, mit dem Wert src/main/java
. Was leider nicht funktioniert, ist das verwenden des identischen Ausgabeverzeichnis (kann natürlich Absicht sein, aber ich fand es schon zu Ant Zeiten besser, die Verzeichnisse synchron zu halten), welches build/classes/main
anstatt bin
entsprechen würde.
Aber man kann in Gradle ja alles beeinflussen. Also soll hier das identische Ausgabeverzeichnis verwendet werden.
build.gradle mit definiertem Ausgabeverzeichnis:
apply plugin: 'java' apply plugin: 'eclipse' eclipse { classpath { defaultOutputDir = compileJava.destinationDir } }
Es wird mit dem classpath
die entsprechend zu erzeugende Datei manipuliert und mit defaultOutputDir
der output
Teil in der .classpath
Datei gesteuert. compileJava
ist ein Task der aus dem Java Plugin eingebunden wurde und der für den Compile Vorgang der Java Objekte zuständig ist. Im Attribute destinationDir
wird das entsprechende classes-Ausgabeverzeichnis referenziert.
Mit dem Aufruf von gradle eclipse
werden die Dateien erneut geschrieben. Aber halt, man sollte vorher ein gradle cleanEclipse
ausführen, denn sonst hat man auf einmal zwei out Elemente, das Gradle die Datei nicht einfach überschreibt, sondern nur Neuerungen/Änderungen bearbeitet.
.classpath mit angepasstem output
Als abschließenden Schritt, soll das Projekt einen Namen in Eclipse bekommen und eine externe Library (Java Mail) soll noch eingebunden werden.
build.gradle erweitert:
apply plugin: 'java' apply plugin: 'eclipse' repositories { mavenCentral() } configurations { mail } dependencies { mail 'javax.mail:mail:1.4.6' } eclipse { project { name = 'MyMailExample' } classpath { plusConfigurations += configurations.mail defaultOutputDir = compileJava.destinationDir } }
Wie man eine externe Lib in Gradle einbindet, wird hier beschrieben. Hier neu ist der Teil project { }
, der so zu erwarten war und wichtiger die externe Lib. plusConfiguration += configurations.mail
, dadurch wird auf den Bereich configurations
zugegriffen und auf die Entsprechende Bibliothek mail
. Diese wird dann im .classpath
eingefügt.
.classpath mit externer Lib:
.project mit dem neuen Namen:
MyMailExample org.eclipse.jdt.core.javanature org.eclipse.jdt.core.javabuilder
Schreibe einen Kommentar