Как установить один jar-вариант JSF 2.3 (javax.faces.jar) на WildFly

Я хочу использовать JSF 2.3 в своем приложении, но WildFly использует вариант 2 JAR для версии 2.2.

Oracle сказал здесь https://javaserverfaces.java.net/2.3/download.html, который не выпустит вариант 2.3.2 JAR.

Ответ 1

Здесь ручная процедура:

  • Извлеките javax.faces.jar инструментом ZIP. Вы получите 3 папки com, javax и META-INF.

  • Пакеты com и META-INF в jsf-impl.jar с помощью инструмента ZIP.

  • Затем удалите все файлы/подпапки в META-INF кроме MANIFEST.MF.

  • Пакеты javax и META-INF в jsf-api.jar с помощью инструмента ZIP.

  • Продолжайте работать с этими JAR: Обновите JSF/Mojarra в JBoss AS/EAP/WildFly.


Для заинтересованных, JBoss AS и WildFly имеет внутреннее модульное разделение API на основе Java EE и файлов impl. Разделенные файлы JAR jsf-api.jar и jsf-impl.jar по-прежнему необходимы. Причина не совсем техническая, а просто дополнительный сервис, который заставляет разработчиков программировать против правильных библиотек. Во время компиляции отображаются только модули API (обычно через интегрированный с IDE плагин, который добавляет их в "путь сборки" ). Это должно избегать случайного поиска, импорта и использования классов реализации, например, в пакете com.sun.faces.*.

Уже с версии 1.x реализация JSF Mojarra состояла из двух файлов JAR: jsf-api.jar и jsf-impl.jar. API JAR содержал классы javax.faces.*, а JAR реализации содержал классы com.sun.faces.*. Поскольку изменение системы сборки соответствует правилам Java EE Maven, оба класса API и реализации были объединены в один файл javax.faces.jar, см. Также issue 2028 (началось с Mojarra 2.1.6 в декабре 2011 года). Начиная с Mojarra 2.3, разделенные файлы JAR больше не создаются.