Gradle 3.4

Mittlerweile ist es bereits 2 Wochen her, dass Gradle 3.4 veröffentlicht wurde. Es ist also höhste Zeit, sich mal die neuen Änderungen anzuschauen, insbesondere da diese viele Verbesserungen für lang laufende Builds enthalten.

Der inkrementelle Compiler wurde weiter verbessert und vom Gradle-Team für die produktive Benutzung freigegeben. Insbesondere für CI Server, wo bisher ein kompletter Build empfohlen war, kann dieses Feature nun benutzt werden, um Wartezeiten zu reduzieren. Gerade bei Multi-Module Builds kann durch das neue Feature der Compile Avoidance erheblich Zeit gespart werden. Hierbei wird analysiert, ob das ABI (Application Binary Interface) identisch ist, und sofern dieses zutrifft werden abhängige Module nicht neu kompiliert. Dieses trifft z. B. auf Namen von nicht public Methoden, Kommentare, private Felder und innere Klassen, sowie die Benennung von Jar-Dateien zu. Um Compile Avoidance für eigene Tasks zu verwenden, gibt es die neue Annotation @CompileClasspath, mit der ausgedrückt wird, dass ein Task nur laufen muss, wenn sich der Class Path geändert hat.

Meine persönliche Empfehlung ist, einmal am Tag einen kompletten Build-Vorgang durchzuführen, idealerweise mit komplett gelöschtem Workspace und gelöschten .gradle Caches. Somit wird sichergestellt, dass das jeweilige Projekt jederzeit unabhängig von der verwendeten Umgebung neu kompiliert werden kann und dass alle externen Abhängigkeiten weiterhin auflösbar sind.

Zudem neu hinzugekommen ist das JavaLibrary Plugin, welches darauf ausgelegt ist, eine bessere Abbildung von Java-Libraries in Gradle hinzubekommen. Im Wesentlichen fügt es bei den Dependencies die beiden Konfigurationen api und implementation hinzu, hiermit wird verhindert, dass implementation Abhängigkeiten in nachfolgenden Projekten gesehen werden. Bei dem normalen Java Plugin sind Abhängigkeiten in der compile-Konfiguration auch bei nachfolgenden Projekten im Class Path auffindbar. Dies ermöglicht zudem ein schnelleres Kompilieren, weil der Class Path erheblich reduziert wird. Hiermit wird weiterhin die Trennung zwischen runtime und compiletime verbessert, und im Zusammenhang mit dem neuen maven-publish Plugin werden auch pom’s generiert, die dies entsprechend ausdrücken.

Zudem gibt es noch eine Menge kleinerer Bugfixes und Änderungen, eine komplette Liste auf Englisch ist hier zu sehen. Alleine wegen des schnelleren Kompilierens empfehle ich jedem, einmal kurz zu evaluieren, ob ein Gradle Update möglich ist.

Short URL for this post: https://wp.me/p4nxik-2Q3
This entry was posted in Build, config and deploy and tagged , , , . Bookmark the permalink.

Leave a Reply