LessWicketApplicationInstantiator.javalesscss-java в жизненный цикл приложения Wicket: он находит исходные файлы .less в classpath, компилирует их в CSS в файловой системе, монтирует скомпилированный CSS как версионированный ресурс Wicket (с помощью LessResourceReference) и — в режиме разработки — регистрирует наблюдатели файловой системы, которые автоматически перекомпилируют файлы при изменении любого исходного файла .less. Имя скомпилированного CSS-файла включает временную метку запуска сервера в качестве маркера версии для сброса кэша (projectforge-version-{timestamp}.css).Класс реализует Serializable и поддерживает статическое поле instance. Во время запуска приложения Wicket создаётся экземпляр с указанием исходного пути .less, целевого пути .css и базовой директории файловой системы baseDir. Вызывается метод instantiate(), который:
ClassPathResourcecompileCss — полезно для продакшена, где CSS должен быть предварительно скомпилирован)LessResourceReference для скомпилированного выводаКогда WebConfiguration.isDevelopmentMode() возвращает true, класс использует встроенную инфраструктуру IModificationWatcher Wicket для мониторинга основного LESS-источника и всех его зависимостей @import. При изменении любого файла наблюдатель запускает перекомпиляцию — разработчики видят изменения CSS немедленно, без перезапуска сервера. Наблюдатель охватывает весь транзитивный граф импортов через mainLessSource.getImports().values().
Метод encodePathWithCachingStrategy заменяет .css на -version-{startTime}.css в пути ресурса. Временная метка (WicketApplication.getStartTime()) меняется при каждом перезапуске сервера, эффективно сбрасывая кэш браузера после развёртывания. Префикс -version- намеренно отличается от стандартного -ver- Wicket, чтобы избежать коллизий с внутренним версионированием ресурсов Wicket.
Статический метод renderCompiledCssResource(IHeaderResponse) — это точка входа, вызываемая шаблонами страниц для включения скомпилированного CSS в заголовки HTML. Он рендерит CssReferenceHeaderItem, указывающий на смонтированный ресурс. Если инициализатор не был инициализирован (статический instance равен null), он логирует ошибку — это защитный механизм для страниц, отображаемых до завершения компиляции LESS.
| Коммит | Что изменилось |
|---|---|
868d6abb7 по 4a6390e11 | Шесть коммитов, охватывающих обновления года авторских прав (2021→2026) и слияние миграции на Wicket 8 (4548710df). Обновления авторских прав следуют шаблону ежегодной замены заголовков. Коммит миграции на Wicket 8 (4a6390e11) является слиянием из feature/wicket8 в develop — хотя сам diff слияния может не показывать изменений в этом конкретном файле, ветка принесла значительные изменения API в модуле wicket. Логика самого класса оставалась стабильной; все записи в истории относятся к инфраструктурным изменениям, а не к модификациям функциональности. |