10. Juli 2025

Automatisierte Code-Migration mit OpenRewrite

Moderne stellt mit OpenRewrite ein Tool zur Verfügung, das automatisierte Migrationen von Code und Konfigurationen ermöglicht. OpenRewrite hat das Potenzial, ein wichtiger Bestandteil der Softwareentwicklung zu werden.

Modernisierung
Platform Engineering
Infrastructure & Cloud Services
Digital Transformation
Developer Experience
Develper relaxes at the beach , OpenRewrite works for him

Was ist OpenRewrite?

Wer Software entwickelt oder betreibt, kennt das Problem: Eine neue Version einer Library erscheint – und plötzlich müssen Code oder Konfigurationen angepasst werden. Doch vorher heisst es: mühsam die Release Notes durcharbeiten. Meistens handelt es sich um einfaches Suchen und Ersetzen, manchmal muss die Struktur angepasst werden. So oder so ist es eine Menge manueller Aufwand. Da dieser meist gescheut wird, verharrt viele Software in alten Zuständen und wird anfällig für Schwachstellen. Genau hier kommt OpenRewrite ins Spiel, indem es Migrationen automatisiert ausführen kann. Gepaart mit der Schwarmintelligenz der Open Source Community hat sich ein regelrechter Katalog von Recipes – so werden die Migrationen in OpenRewrite genannt – gebildet.

Wie benutzt man OpenRewrite?

Eventuell hast du OpenRewrite schon benutzt, ohne es zu wissen. Da es zum Beispiel im Hintergrund des Spring Boot Migrators verwendet wird. Generell kann man OpenRewrite mit Maven und Gradle verwenden, wo es entsprechende Plugins gibt, oder es ist auch im Redhat Migration Toolkit for Applications integriert. Zusätzlich existiert von Moderne – der Firma hinter OpenRewrite – eine CLI, die jedoch zur Enterprise-Lösung gehört.

Generell sucht man sich ein Recipe im Katalog, zum Beispiel um Spring Boot zu upgraden, und führt es mit dem entsprechenden Build-Tool aus. Dazu gibt es unter der Recipe-Beschreibung freundlicherweise sogar entsprechende Hinweise. Anschliessend muss nur noch der Code überprüft und getestet werden, und man ist fertig.

Recipes selbst schreiben

Es gibt zwei Möglichkeiten, eigene Recipes zu schreiben:

  • Man kombiniert bestehende Recipes zu einem neuen mittels einer YAML-Datei.
  • Man schreibt mit Java ein komplett neues Recipe.

Wir werden hier nur auf die YAML-Variante eingehen und das Schreiben von Java-Recipes in einem späteren Blogpost behandeln.

Nehmen wir an, wir haben eine Menge an Ansible-Playbooks und wollen bei allen einen Task hinzufügen. Dafür gibt es ein Append to Sequence Recipe, welches Elemente an YAML-Sequenzen anhängt. Da es konfiguriert werden muss, können wir es nicht einfach so aufrufen, sondern müssen ein Recipe schreiben, welches das «Append to Sequence» enthält. Dazu erstellen wir ein Grundgerüst:

---
type: specs.openrewrite.org/v1beta/recipe
name: ch.puzzle.openrewrite.yaml.Example
displayName: Add new task to ansible playbook
recipeList:

Hier sehen wir, dass wir einen Namen definieren müssen, mit welchem wir das Recipe später aufrufen können. Zusätzlich gibt es noch das Feld displayName, in dem wir einen «human-readable» Namen festlegen können. Unter recipeList können wir nun unsere Recipes einfügen. In unserem Fall ist das «Append to Sequence» und sieht wie folgt aus:

- org.openrewrite.yaml.AppendToSequence:
    sequencePath: $.*.tasks
    value:  |
      name: ET calling home
      ansible.builtin.uri:
        url: http://motherplanet

Darin haben wir den JSON-Pfad zu den Tasks des Playbooks definiert und den neuen Task. Wenn wir das Recipe jetzt ausführen, wird der neue Task hinzugefügt. Ein detaillierteres Beispiel und Erklärungen, wie man YAML-Recipes schreibt, finden sich in diesem Video.

Fazit

Mit OpenRewrite haben Entwickler ein sehr mächtiges Werkzeug zur Verfügung, um ihren Code up-to-date zu halten oder anzupassen, indem man zum Beispiel automatisch eine Library austauscht. Die wirklich grosse Stärke von OpenRewrite ist die Anzahl an Open-Source-Recipes, die von einer immer wachsenden Community von Freiwilligen entwickelt wird. Leider sind einige wenige der Recipes nur für Enterprise-Kunden zugänglich, aber eventuell entwickelt die Community dazu auch noch Open-Source-Recipes.