EN · DE · RU · FR · ES

#2771: LessWicketApplicationInstantiator.java

projectforge-wicket/src/main/java/de/micromata/less/LessWicketApplicationInstantiator.java Motor de compilación LESS CSS (Integración Wicket) · projectforge-wicket/src/main/java/de/micromata/less/LessWicketApplicationInstantiator.java 206 líneas · 116 código · 62 comentarios · 28 en blanco
El orquestador central de compilación LESS a CSS para la capa web Wicket de ProjectForge. Esta clase singleton integra el compilador lesscss-java en el ciclo de vida de la aplicación Wicket: localiza archivos fuente .less en el classpath, los compila a CSS en el sistema de archivos, monta el CSS compilado como un recurso Wicket versionado (usando LessResourceReference) y — en modo desarrollo — registra observadores del sistema de archivos que recompilan automáticamente cuando cualquier archivo fuente .less cambia. El nombre del archivo CSS compilado incluye la marca de tiempo de inicio del servidor como marcador de versión para invalidar caché (projectforge-version-{timestamp}.css).

Arquitectura

Integración con el ciclo de vida de la aplicación

La clase implementa Serializable y mantiene un campo estático instance. Durante el inicio de la aplicación Wicket, se crea una instancia con la ruta fuente .less, la ruta destino .css y un baseDir del sistema de archivos. Se llama al método instantiate(), el cual:

  1. Resuelve el archivo fuente LESS desde el classpath mediante ClassPathResource de Spring
  2. Opcionalmente compila el LESS a CSS (controlado por la bandera compileCss — útil para producción donde el CSS debe estar precompilado)
  3. Crea un LessResourceReference para la salida compilada
  4. Monta el recurso en el registro de recursos de Wicket con una ruta versionada
  5. En modo desarrollo, adjunta observadores de modificación del sistema de archivos a cada archivo LESS importado

Observadores en modo desarrollo

Cuando WebConfiguration.isDevelopmentMode() devuelve verdadero, la clase aprovecha la infraestructura IModificationWatcher incorporada de Wicket para monitorear la fuente LESS principal y todas sus dependencias @import. Cuando cualquier archivo cambia, el observador dispara una recompilación — los desarrolladores ven los cambios CSS inmediatamente sin reiniciar el servidor. El observador cubre todo el grafo de importación transitivo mediante mainLessSource.getImports().values().

Estrategia de invalidación de caché

El método encodePathWithCachingStrategy reemplaza .css con -version-{startTime}.css en la ruta del recurso. La marca de tiempo (WicketApplication.getStartTime()) cambia en cada reinicio del servidor, invalidando efectivamente los cachés del navegador después de los despliegues. El prefijo -version- es deliberadamente diferente del -ver- predeterminado de Wicket para evitar colisiones con el versionado interno de recursos de Wicket.

Ayudante de renderizado estático

El método estático renderCompiledCssResource(IHeaderResponse) es el punto de entrada llamado por las plantillas de página para incluir el CSS compilado en los encabezados HTML. Renderiza un CssReferenceHeaderItem que apunta al recurso montado. Si el instanciador no ha sido inicializado (la instance estática es nula), registra un error — esto es un mecanismo de seguridad para páginas renderizadas antes de que la compilación LESS se complete.

Historial Git

CommitQué cambió
868d6abb7 hasta 4a6390e11Seis commits que abarcan actualizaciones de año de copyright (2021→2026) y una fusión de migración a Wicket 8 (4548710df). Las actualizaciones de copyright siguen el patrón de barrido anual de encabezados. El commit de migración a Wicket 8 (4a6390e11) es una fusión desde feature/wicket8 hacia develop — aunque el diff de fusión en sí mismo puede no mostrar cambios en este archivo específico, la rama trajo cambios significativos en la API en todo el módulo wicket. La lógica de la clase en sí ha sido estable; todas las entradas del historial son cambios de infraestructura más que modificaciones de funcionalidad.