Gradle und Dependencies (in Eclipse)

Seit kurzem beschäftige ich mich mit dem Java-Buildtool Gradle.
Heute habe ich mir mal näher angesehen, wie man am Besten die Dependencies mit Gradle in Verbindung mit Eclipse handelt.

Prinzipiell hat man drei Möglichkeiten mit Dependencies für Gradle und Eclipse umzugehen:

  1. Doppeltes Pflegen der Dependencies: einmal für Gradle und einmal für Eclipse
  2. Pflegen der Dependencies in Eclipse: etwa im Folder „/lib“ Dependencies mit Eclipse verwalten und Gradle darauf zugreifen lassen
  3. Pflege der Dependencies in Gralde: die Dependencies in Gradle pflegen und diese dann in Eclipse einbinden

Möglichkeit 1 ist natürlich mit sehr viel Aufwand verbunden und auch fehleranfällig. Schon alleine deshalb sollte man diese Option nicht verwenden. Auch wenn dies meist der Weg war, mit dem man in ANT gearbeitet hat, so kann man das mit Gradle doch besser machen.

Option 2 sieht schon besser aus. Man muss die Libraries nur mehr einmal herunterladen und kann in Gradle dann den lib-Ordner als fileset in den dependencies einbinden. Also schon mal deutlich besser und weniger fehleranfällig als das doppelte Verwalten der Abhängigkeiten. Einen kleinen Nachteil gibt es aber selbst hier noch. Es müssen  nämlich alle Dependencies in das Versionskontrollsystem eingecheckt werden und um Updates muss man sich per Hand kümmern.

Sehen wir uns also Möglichkeit 3 an. Die beiden Nachteile aus Option 2 sind nicht mehr vorhanden. Gradle kümmert sich um die Speicherung und lädt bei Bedarf die Libraries aus einem Repository (etwa MavenCentral) nach. Das Projekt braucht im Repository also deutlich weniger Platz. Je nachdem wie man die Dependencies in Gradle definiert, kann man auf einer festen Version einer Abhängigkeit bleiben oder Gradle automatisch neuere Versionen nachladen lassen, sobald diese im Repository verfügbar sind.

Doch wie weis Eclipse nun von den Abhängigkeiten in Gradle? Dazu gibt es das Gradle-Eclipse-Pugin. Nach dem Definieren der Abhängigkeiten im Gradle Buildfile braucht man nur ein „gradle eclipse“ aufrufen und schon schreibt Gradle eine Eclipse „.classpath“-Datei in welcher die Abhängigkeiten für Eclipse bekanntgegeben werden. Eclipse verweist dann auf die jar files im Gradle-Cache.

Option 3 bietet sehr viele Vorteile und sollte möglichst immer verwendet werden. Es gibt auch ein paar wenige Spezialfälle wo auch Option 2 sinnvoll ist (etwa wenn eine Abhängigkeit nicht über ein Repository geladen werden kann). Dann kann man aber meist über eine Kombination aus Option zwei und drei nachdenken. Möglichkeit 1 sollte man aber vermeiden, da diese fehleranfällig ist und auch ansonsten keinen Vorzug bietet.

Schreibe einen Kommentar