EN · DE · RU · FR · ES

#2771: LessWicketApplicationInstantiator.java

projectforge-wicket/src/main/java/de/micromata/less/LessWicketApplicationInstantiator.java Moteur de compilation LESS CSS (Intégration Wicket) · projectforge-wicket/src/main/java/de/micromata/less/LessWicketApplicationInstantiator.java 206 lignes · 116 code · 62 commentaires · 28 vides
L'orchestrateur central de compilation LESS-vers-CSS pour la couche web Wicket de ProjectForge. Cette classe singleton intègre le compilateur lesscss-java dans le cycle de vie de l'application Wicket : elle localise les fichiers sources .less sur le classpath, les compile en CSS sur le système de fichiers, monte le CSS compilé en tant que ressource Wicket versionnée (via LessResourceReference), et — en mode développement — enregistre des observateurs de fichiers qui recompilent automatiquement lorsqu'un fichier source .less est modifié. Le nom du fichier CSS compilé inclut l'horodatage de démarrage du serveur comme marqueur de version pour l'invalidation de cache (projectforge-version-{timestamp}.css).

Architecture

Intégration au cycle de vie de l'application

La classe implémente Serializable et maintient un champ statique instance. Lors du démarrage de l'application Wicket, une instance est créée avec le chemin source .less, le chemin cible .css et un baseDir du système de fichiers. La méthode instantiate() est appelée, laquelle :

  1. Résout le fichier source LESS depuis le classpath via ClassPathResource de Spring
  2. Compile optionnellement le LESS en CSS (contrôlé par le drapeau compileCss — utile en production où le CSS doit être pré-compilé)
  3. Crée une LessResourceReference pour la sortie compilée
  4. Monte la ressource sur le registre des ressources de Wicket avec un chemin versionné
  5. En mode développement, attache des observateurs de modification du système de fichiers à chaque fichier LESS importé

Observateurs en mode développement

Lorsque WebConfiguration.isDevelopmentMode() retourne vrai, la classe exploite l'infrastructure IModificationWatcher intégrée de Wicket pour surveiller la source LESS principale et toutes ses dépendances @import. Lorsqu'un fichier change, l'observateur déclenche une recompilation — les développeurs voient les modifications CSS immédiatement sans redémarrer le serveur. L'observateur couvre l'ensemble du graphe d'import transitif via mainLessSource.getImports().values().

Stratégie d'invalidation de cache

La méthode encodePathWithCachingStrategy remplace .css par -version-{startTime}.css dans le chemin de la ressource. L'horodatage (WicketApplication.getStartTime()) change à chaque redémarrage du serveur, ce qui invalide efficacement les caches des navigateurs après les déploiements. Le préfixe -version- est délibérément différent du -ver- par défaut de Wicket pour éviter les collisions avec le versionnage interne des ressources de Wicket.

Assistant de rendu statique

La méthode statique renderCompiledCssResource(IHeaderResponse) est le point d'entrée appelé par les templates de page pour inclure le CSS compilé dans les en-têtes HTML. Elle génère un CssReferenceHeaderItem pointant vers la ressource montée. Si l'instanciateur n'a pas été initialisé (le champ statique instance est nul), il enregistre une erreur — c'est un filet de sécurité pour les pages rendues avant la fin de la compilation LESS.

Historique Git

CommitCe qui a changé
868d6abb7 à 4a6390e11Six commits couvrant les mises à jour des années de copyright (2021→2026) et une fusion de migration Wicket 8 (4548710df). Les mises à jour de copyright suivent le modèle de balayage annuel des en-têtes. Le commit de migration Wicket 8 (4a6390e11) est une fusion de feature/wicket8 dans develop — bien que le diff de fusion lui-même puisse ne pas montrer de modifications dans ce fichier spécifique, la branche a apporté des changements d'API significatifs dans l'ensemble du module wicket. La logique de la classe elle-même est restée stable ; toutes les entrées d'historique sont des modifications d'infrastructure plutôt que des modifications de fonctionnalités.