Facebooks Buck bringt Verbesserungen für den Umgang mit Java-Code

Das von Facebook entwickelte Build-Tool soll das Kompilieren von Java-Code beschleunigen. Dazu setzt Buck auf das Erstellen von "stub JAR"-Dateien, ignoriert ungenutzte Klassen und bietet ein Rule-Pipelining an.

In Pocket speichern vorlesen Druckansicht
Facebooks Buck bringt Verbesserungen für den Umgang mit Java-Code
Lesezeit: 2 Min.
Von
  • Björn Bohn

Facebook kündigte in einem Blogpost eine Weiterentwicklung des eigenen Build-Werkzeugs Buck an, die sich auf den Umgang mit Java-Code fokussiert. Das quelloffene Tool, bei dem die inkrementelle Entwicklung von Software im Vordergrund steht, existiert bereits seit 2013. Um das Entwickeln von Android-Applikationen mit Java zu beschleunigen, bringt Buck nun ein paar Features mit: allen voran das Erstellen von sogenannten "stub JAR"-Dateien.

Bei der Entwicklung mit Java finden Java-Archive-Dateien (JAR-Dateien) Einsatz, in denen zusätzliche Metadaten gespeichert sind. Änderungen im Java-Code können dabei JAR-Dateien erzeugen, ohne aber einen Einfluss auf Abhängigkeitsregeln mit sich zu ziehen. Da Buck einen Vergleich der Ergebnisse ausführt und bei den JAR-Dateien eben einen Unterschied feststellt, findet ein Rebuild statt, ohne dass sich die für Buck wichtigen Abhängigkeitsregeln eigentlich geändert haben. Buck erstellt deshalb nach dem Erstellen einer JAR-Datei ein eigenes "stub JAR" und entfernt einige Dinge, die generell keinen Einfluss auf die Regeln haben. Dadurch muss Buck nicht jedes Mal den kompletten Code neu kompilieren.

Die letzte große Neuerung ist das sogenannte Rule Pipelining. Normalerweise erstellt sich ein stub JAR erst, wenn die vollständige JAR-Datei bereits vorliegt. Dem Java-Compiler liegen allerdings bereits nach der Hälfte der Kompilierzeit alle notwendigen Informationen zur Erstellung eines stub JAR. Mit dem Rule Pipelining beginnt die Erstellung daher bereits zu dieser Zeit – so lassen sich Engpässe umgehen, da Buck normalerweise erst auf die Abhängigkeiten warten muss.

Ein Vergleich der Kompilierungsdauer mit und ohne Rule Pipelining

(Bild: Facebook)

Eine weitere Änderung ist, dass Buck nun automatisch trackt, welche Klassen eine Abhängigkeit zu Erstellungsregeln haben. Dadurch weiß Buck, welche Klassen es bei einem Rebuild berücksichtigen muss und kümmert sich entsprechend nur um Änderungen dieser Klassen. Dies soll laut Facebook zu einem 35 Prozent schnelleren Rebuild führen. Wer Buck nutzen möchte, sollte die Anleitung zur Rate ziehen, um den eigenen Code kompatibel zu machen. (bbo)