TDM Consult GmbHBusiness Flies
Zum Inhalt springen

Projekt- und Buildstruktur ​

Der Legacy-Build liegt zentral im Teilprojekt bflies. Eine einzelne ANT-Datei kompiliert die Anwendung sowie zwei intern verwendete Java-Projekte und erstellt daraus das deploybare WAR.

Projekte ​

ProjektAufgabeErgebnis im Legacy-Build
bfliesWebanwendung, Fachlogik, REST-Endpunkte und Webressourcenbflies.war
bflies-utilAllgemeine Java-, CDI-, JPA-, JSF- und Web-Hilfsklassenbflies-util.jar im WAR
bflies-bootstrapAktualisierung des Datenbankschemas beim Anwendungsstartbflies-bootstrap.jar im WAR
bflies-migrationHistorisches Werkzeug zur DatenmigrationNicht mehr Bestandteil des aktiven Builds
bflies-deploymentDockerfile und Tomcat-KonfigurationContainer-Image mit Tomcat und WAR

Die Projekte verwenden nicht das heute übliche Maven-Verzeichnislayout. Java-Quellen liegen jeweils in src, die Webanwendung in WebContent und die Bibliotheken in mehreren Unterverzeichnissen von resources/lib beziehungsweise WebContent/WEB-INF/lib.

ANT-Build ​

Der zentrale Build befindet sich in bflies/build.xml. Sein Standardziel führt vereinfacht folgende Schritte aus:

  1. Buildverzeichnisse erzeugen und Nicht-Java-Ressourcen kopieren.
  2. bflies-util kompilieren und als internes JAR paketieren.
  3. bflies-bootstrap kompilieren und als internes JAR paketieren.
  4. Den historischen Dojo-Produktionsbuild ausführen.
  5. XHTML-Templates für den Produktionsbetrieb filtern.
  6. Die Java-Klassen der Hauptanwendung kompilieren.
  7. Klassen, interne JARs, Drittanbieterbibliotheken und Webressourcen zu bflies.war paketieren.

Die Kompilierung ist auf Java 8 ausgerichtet. Der Build verwaltet seine Klassenpfade manuell und verweist direkt auf eingecheckte JAR-Dateien.

Abhängigkeitsverwaltung ​

Das Legacy-Repository enthält zahlreiche Binärabhängigkeiten, darunter Tomcat-, Hibernate-, Weld-, Jersey-, JSF- und RichFaces-Bibliotheken. Teilweise liegen mehrere Versionen derselben Bibliothek im Repository. Der ANT-Build entscheidet anhand fester Verzeichnispfade, welche Variante verwendet wird.

Diese Form der Verwaltung hat mehrere Auswirkungen:

  • Herkunft und Integrität einzelner JARs sind nicht zentral dokumentiert.
  • Transitive Abhängigkeiten werden von Hand zusammengestellt.
  • Versionskonflikte werden erst beim Kompilieren oder zur Laufzeit sichtbar.
  • Tomcat-API und Tomcat-Implementierung sind im Build-Klassenpfad vermischt.
  • Sicherheits- und Lizenzprüfungen sind nur eingeschränkt automatisierbar.

Frontend-Build ​

Zusätzlich zur Java-Kompilierung enthält ANT einen eigenen Produktionsbuild für Dojo 1.10.1. Die vollständige Dojo-Quelldistribution ist im Repository abgelegt. Der Build startet den Dojo Builder über Rhino und verwendet ein projektspezifisches Release-Profil.

Dabei entstehen optimierte JavaScript-, CSS- und Sprachressourcen. Nur ausgewählte Ergebnisse werden in das WAR aufgenommen. Dieser Schritt ist eng an Verzeichnisstruktur, Builder-Version und Profil gekoppelt.

Struktur des WAR ​

Das WAR enthält im Wesentlichen:

  • Hauptklassen unter WEB-INF/classes,
  • bflies-util.jar und bflies-bootstrap.jar unter WEB-INF/lib,
  • Hibernate-, Weld-, Jersey-, JSF- und weitere Laufzeitbibliotheken unter WEB-INF/lib,
  • web.xml und weitere Java-EE-Deskriptoren,
  • Facelets-Templates und XHTML-Seiten,
  • optimierte Dojo-/JavaScript-/CSS-Ressourcen,
  • Bilder, 3-D-Ressourcen und weitere statische Dateien.

Für die erste Stufe von BFlies Next dient diese Struktur als Vergleichsbasis. Das neue Maven-WAR muss nicht bytegleich sein, soll sich aber im Tomcat 7 funktional wie das Legacy-WAR verhalten.