Experiment der Erzeugung von PlantUML-Diagrammen aus Quelltext

vorhergehende Artikel in: Java Komponenten Markup
05.07.2026

Heute will ich von einem letztlich gescheiterten Experiment erzählen. Um mal ein Zitat aus einem Song zu benutzen: "Ja, auch das muss ab und zu mal sein!"

Ich habe im Urlaub überlegt, wie man die Dokumentation der Scripting- und Plugin-Schnittstellen in - zum Beispiel - sQLshell und dWb+ verbessern könnte und bin auf die Idee gekommen, UML-Diagramme dafür zu erstellen. Das sollte natürlich alles ohne teure Software, bei der man für den Vendor-Lockin gleich mitbezahlt laufen - also setzte ich mir als Ziel, das mit PlantUML lösen zu wollen.

Da kam natürlich sofort die Frage auf, ob nicht schon Leute vor mir dieselbe Idee hatten und das eventuell schon als fertige Lösung existieren würde. Ich recherchierte ein wenig und fand tatsächlich einige Alternativen: uml-parser als standalone-Lösung, Kotlin2PlantUML als standalone-Lösung mit API, so dass man diese Lösung auch in eigenen Programmen einsetzen könnte und livingdoc Als Lösung, die sich in den Build-prozess mit Maven integrieren ließe.

Da livingdoc auf Annotations setzte und das PlantUML mittels Annotaion Processor erzeugt fiel meine Wahl hierauf. Nun tauchte ich zunächst mal in ein Rabbithole ab, denn wie gesagt: Die Lösung war für Maven gedacht. Da ich Configuration by Convention als Irrweg empfinde habe ich durchaus noch vioele Projekte, die auf ANT basieren. Die, um die es hier gehen sollte, waren dieser Kategorie zuzurechen.

Also benötigte ich eine Methode, aus Maven-Dependencies einer pom.xml ein ivy.xml zu erzeugen. Die Lösung besteht aus drei Modulen - daher musste das dreimal - je einmal für jedes Modul geschehen. Glücklicherweise verfügt Ivy über Möglichkeiten, die Konfiguration beider Tools in beiden Richtungen zu konvertieren. Die Dependencies der Lösung waren jedoch so zahlreich, dass ich unbegingt vermeiden wollte, diese in meine fachlich motivierten Dependencies zu mischen.

Da kam mir ein Artikel gerade recht, der auf eindrucksvolle Art und Weise beschreibt, wie man Ivy- und Ant-Setups modularisieren kann.

Die letzte Hürde schließlich bestand darin, dass das Verzeichnis, das die Ergebnisse aufnehmen sollte in der Lösung über einen custom Parameter für den Processor festgelegt wurde und nicht über den dafür bereits vorgesehenen Kommandozeilenschalter. Dafür musste ich mich erst einmal daran erinnern, wie man javac diese Processor-Parametzer bei der Ausführung mitgibt...

Nachdem auch diese Herausforderung gemeistert war (alle diese Experimente fanden selbstredend auf einem separaten Branch statt - ich war mir ja noch nicht sicher, ob ich mit den Ergebnissen wirklich so zufrieden sein würde, dass das ein dauerhafter Teil des Projekts würde...), begann ich einige der Klassen der sQLshell mit den entsprechenden Annotations zu versehen und startete das Rendering. Hier ist zu sehen, wie weit ich bei meinem Experiment gekommen bin:

Screenshot Klassen der Scripting- und Plugin-API der sQLshell als UML-Diagramm

Hier sieht man auch direkt einiger der Gründe, warum ich die Arbeit nicht in den master-Branch übernommen habe - Der Hauptgrund ist, dass Assoziationen keine Labels haben und nicht gehen von den korrespondierenden Feldern ausgehen, sondern einfach irgendwo an der jeweiligen Klasse starten. In dieser Form würde die Darstellung die Bevölkerung mehr verwirren, als dass sie hilfreich wäre.

Ich könnte natürlich das Projekt in meinem Sinne erweitern. Vielleicht tue ich das tatsächlich auch irgendwann. Bei Interesse kann man selbst damit experimentieren - ich habe das Projekt auf Codeberg geforkt und eine Release davon erzeugt.

Alle Artikel rss Wochenübersicht Monatsübersicht Codeberg Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Beliebige äußere Form für generierte Stadtpläne

    25.07.2021

    Ich habe den neulich vorgestellten Generator für beliebige Stadtpläne, der als Ausgabeformat unter anderem GeoJson unterstützt ein wenig erweitert

    Weiterlesen

Neueste Artikel

  • Docker-Services im Homelab

    Diese Seite wird mit allen derzeit in meinem Self-Hosting Homelab betriebenen Services auf Docker-Basis befüllt (Eigenentwicklungen werden nicht genannt, sofern sie keine öffentlich verfügbaren Open-Source-Lösungen darstellen).

    Weiterlesen
  • sQLshell Version 7.9pre3 build 11292

    Eine neue Version der sQLshell ist verfügbar!

    Weiterlesen
  • SBOMs für alte Java-Projekte II

    Ich habe bereits vor einiger Zeit eine Möglichkeit präsentiert, SBOMs aus alten Java-Projekten zu erstellen. Ich bin neulich einer speziellen Form von Java-Projekten begegnet, die mich dazu bewogen hat, mich auch hierfür an der (nachträglichen) Erstellung einer SBOM zu versuchen...

    Weiterlesen

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen Codeberg-Repositories findet man hier.