EN · DE · RU · FR · ES

#2771: LessWicketApplicationInstantiator.java

projectforge-wicket/src/main/java/de/micromata/less/LessWicketApplicationInstantiator.java LESS-CSS-Kompilierungs-Engine (Wicket-Integration) · projectforge-wicket/src/main/java/de/micromata/less/LessWicketApplicationInstantiator.java 206 Zeilen · 116 Code · 62 Kommentare · 28 leer
Der zentrale LESS-zu-CSS-Kompilierungs-Orchestrator für die Wicket-Webschicht von ProjectForge. Diese Singleton-Klasse integriert den lesscss-java-Compiler in den Wicket-Anwendungslebenszyklus: Sie findet .less-Quelldateien im Klassenpfad, kompiliert sie zu CSS im Dateisystem, mountet das kompilierte CSS als versionierte Wicket-Ressource (mittels LessResourceReference) und registriert im Entwicklungsmodus Dateisystem-Überwacher, die bei Änderungen an .less-Quelldateien automatisch neu kompilieren. Der kompilierte CSS-Dateiname enthält den Server-Startzeitstempel als Cache-Busting-Versionsmarker (projectforge-version-{timestamp}.css).

Architektur

Integration in den Anwendungslebenszyklus

Die Klasse implementiert Serializable und führt ein statisches instance-Feld. Beim Start der Wicket-Anwendung wird eine Instanz mit dem Quell-.less-Pfad, dem Ziel-.css-Pfad und einem Dateisystem-baseDir erstellt. Die Methode instantiate() wird aufgerufen, welche:

  1. Die LESS-Quelldatei über Springs ClassPathResource aus dem Klassenpfad auflöst
  2. >li>Optional das LESS zu CSS kompiliert (gesteuert durch das compileCss-Flag – nützlich für die Produktion, wo CSS vorab kompiliert werden sollte)
  3. Eine LessResourceReference für die kompilierte Ausgabe erstellt
  4. Die Ressource mit einem versionierten Pfad im Wicket-Ressourcenregister mountet
  5. Im Entwicklungsmodus Dateisystem-Änderungsüberwacher für jede importierte LESS-Datei anfügt

Überwacher im Entwicklungsmodus

Wenn WebConfiguration.isDevelopmentMode() true zurückgibt, nutzt die Klasse Wickets eingebaute IModificationWatcher-Infrastruktur, um die Haupt-LESS-Quelle und alle ihre @import-Abhängigkeiten zu überwachen. Bei Dateiänderungen löst der Überwacher eine Neukompilierung aus – Entwickler sehen CSS-Änderungen sofort, ohne den Server neu starten zu müssen. Der Überwacher deckt den gesamten transitiven Importgraphen über mainLessSource.getImports().values() ab.

Cache-Busting-Strategie

Die Methode encodePathWithCachingStrategy ersetzt .css durch -version-{startTime}.css im Ressourcenpfad. Der Zeitstempel (WicketApplication.getStartTime()) ändert sich bei jedem Serverneustart und macht so nach Bereitstellungen Browser-Caches ungültig. Das Präfix -version- unterscheidet sich bewusst von Wickets Standard--ver-, um Kollisionen mit Wickets interner Ressourcenversionierung zu vermeiden.

Statische Rendering-Hilfsmethode

Die statische Methode renderCompiledCssResource(IHeaderResponse) ist der Einstiegspunkt, der von Seitenvorlagen aufgerufen wird, um das kompilierte CSS in HTML-Header einzubinden. Sie rendert ein CssReferenceHeaderItem, das auf die gemountete Ressource verweist. Wenn der Instantiator noch nicht initialisiert wurde (die statische instance ist null), wird ein Fehler protokolliert – dies ist eine Absicherung für Seiten, die vor Abschluss der LESS-Kompilierung gerendert werden.

Git-Verlauf

CommitWas wurde geändert
868d6abb7 bis 4a6390e11Sechs Commits mit Aktualisierungen der Copyright-Jahre (2021→2026) und einem Wicket-8-Migrations-Merge (4548710df). Die Copyright-Aktualisierungen folgen dem jährlichen Header-Durchlauf. Der Wicket-8-Migrations-Commit (4a6390e11) ist ein Merge von feature/wicket8 in develop – während das Merge-Diff selbst möglicherweise keine Änderungen in dieser spezifischen Datei zeigt, brachte der Branch bedeutende API-Änderungen im gesamten Wicket-Modul. Die Klassenlogik selbst ist stabil geblieben; alle Verlaufseinträge betreffen Infrastrukturänderungen und keine Funktionsänderungen.