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
| Projekt | Aufgabe | Ergebnis im Legacy-Build |
|---|---|---|
bflies | Webanwendung, Fachlogik, REST-Endpunkte und Webressourcen | bflies.war |
bflies-util | Allgemeine Java-, CDI-, JPA-, JSF- und Web-Hilfsklassen | bflies-util.jar im WAR |
bflies-bootstrap | Aktualisierung des Datenbankschemas beim Anwendungsstart | bflies-bootstrap.jar im WAR |
bflies-migration | Historisches Werkzeug zur Datenmigration | Nicht mehr Bestandteil des aktiven Builds |
bflies-deployment | Dockerfile und Tomcat-Konfiguration | Container-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:
- Buildverzeichnisse erzeugen und Nicht-Java-Ressourcen kopieren.
bflies-utilkompilieren und als internes JAR paketieren.bflies-bootstrapkompilieren und als internes JAR paketieren.- Den historischen Dojo-Produktionsbuild ausführen.
- XHTML-Templates für den Produktionsbetrieb filtern.
- Die Java-Klassen der Hauptanwendung kompilieren.
- Klassen, interne JARs, Drittanbieterbibliotheken und Webressourcen zu
bflies.warpaketieren.
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.jarundbflies-bootstrap.jarunterWEB-INF/lib,- Hibernate-, Weld-, Jersey-, JSF- und weitere Laufzeitbibliotheken unter
WEB-INF/lib, web.xmlund 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.