Bestechendes Build-Management

Gradle 4.7 bringt inkrementelles Annotation Processing

Marcel Richters
Gradle 4.7

© Shutterstock.com / WHYFRAME

Nicht einmal zwei Monate hat es gedauert, seit Gradle 4.6 erschienen ist, und schon wurde Gradle 4.7 veröffentlicht. Die wohl wichtigste Neuerung im Tool ist, dass der inkrementelle Java Compiler auch ein Opt-in für die inkrementelle Verarbeitung von Annotationen liefert. Aber das ist noch nicht alles…

Gradle 4.7 ist erschienen und bringt einige Veränderungen mit sich. Neben Bugfixes, zwei Deprecations und einigen potentiellen Breaking Changes hat die Version 4.7 auch wichtige Neuerungen für den Arbeitsablauf im Gepäck.

Inkrementelles Annotation Processing

Am wichtigsten ist den Entwicklern („first and foremost“), dass der inkrementelle Java Compiler jetzt auch inkrementelles Annotation Processing beherrscht. Um davon zu profitieren, braucht es keine Konfiguration, Prozessor-Autoren müssen die Funktion allerdings per Opt-in aktivieren.

Gradle besitzt zwei Konsolenmodi, den einfachen und den „reichhaltigen“. Während der einfache Modus ohne zugehörige Konsole, beispielsweise in einer IDE oder einem CI-Build-Agenten genutzt wird, ist der erweiterte Modus aktiv, wenn Gradle von einer Konsole wie der Kommandozeile aus läuft. Der einfache Modus verfügt jetzt über dieselben Features, wie der erweiterte und die Ausgabe wird unter dem Header gruppiert, anstatt sie zu verschalten. So soll auch im einfachen Modus die Diagnose von Problemen im CI anhand der Protokolle vereinfacht werden. Allerdings kann diese Änderung auch zu Breaking Changes bei Tools führen, die Details aus dem Konsolen-Output der erweiterten Konsole beziehen.

Die Falschen zuerst

Bei Tests werden vorher fehlerhafte Testklassen zuerst ausgeführt. Zusammen mit der --fail-fast-Option aus Gradle 4.6 sollen so sehr viel schnellere Feedback Loops möglich sein.

Mehr Übersicht mit IDEA-Plugin

Mit dem Plug-in für die IntelliJ IDEA werden laut Entwicklern Java-Ressourcenverzeichnisse automatisch in der Projekthierarchie gekennzeichnet. Auch zusätzliche Verzeichnisse lassen sich als Ressourcen oder Testressourcen im IDEA-Modul markieren:

idea {
    module {
        //and some extra resource dirs
        resourceDirs += file('src/main/some-extra-resource-dir')

        //and some extra test resource dirs
        testResourceDirs += file('src/test/some-extra-test-resource-dir')
    }
}

Unterstützung für Mapped Nested Inputs

Plug-ins wie FindBugs können Berichte in verschiedener Art und Weise ausgeben, bspw. als HTML oder Text. Die Ausgabeorte können unterschiedlich sein und Berichte werden nur erstellt, wenn sie aktiviert sind. Vor dem Support von Mapped Nest Inputs wurden Ausgabedateien aus verschiedenen konfigurierten Berichten einzeln eingesammelt:

@OutputFiles
Map<String, File> getEnabledFileReportDestinations();

@Input
SortedSet<String> getEnabledReportNames();

Da jetzt Maps von Reports als Input deklariert werden können, ist folgendes möglich:

@Nested
public Map getEnabledReports() {
    return getEnabled().getAsMap();
}

Damit wird jeder Report als Nested Input mit dem Key als Namen hinzugefügt. Ein FindBugs-HTML-Report wird nach obiger Deklaration als reports.html.destination ausgegeben.

Außerdem können Nested Inputs jetzt mit Namen ausgestattet werden. Zwar werden alle Elemente, die mit @Nested annotiert sind, bereits als seperate Nested Inputs behandelt, aber wenn ein Element Named implementiert ist, wird name als Name der Property behandelt. So soll sich auch einfacher nachvollziehen lassen, welcher Input sich geändert hat.

Neben diesen laut Gradle besonders wichtigen Änderungen gibt es noch einige Andere. Auch auf die potentiellen Breaking Changes sei hier noch einmal hingewiesen. Wer sich für die Details des Updates interessiert, findet diese in den Release Notes.

Verwandte Themen:

Geschrieben von
Marcel Richters
Marcel Richters
Marcel hat Soziologie an der Goethe-Universität in Frankfurt am Main studiert und danach als E-Commerce-Manager gearbeitet. Seit Februar 2018 unterstützt er das Team von JAXenter als Redakteur. Daneben arbeitet er als freier Journalist in der Mainmetropole.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.