Gradle einsetzen um Eclipse Projekte zu erstellen

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
			
		
	
	

Beitrag veröffentlicht

in

von

Schlagwörter:

Kommentare

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.