Maven tomcat: запустить цель и JSF-аннотации на основе компонент / конвертер / валидатор сканирования - PullRequest
6 голосов
/ 10 декабря 2010

Я занимаюсь разработкой приложения JSF 2.0 (Mojarra + Primefaces) и использую среду сборки maven. До того, как я использовал файл face-config.xml для регистрации своих пользовательских конвертеров и валидаторов, до сих пор все шло хорошо. Затем я увидел синтаксический сахар JSF 2.0 - подход к настройке на основе аннотаций. И теперь я хотел бы использовать его вместо файла конфигурации xml. Проблема заключалась в том, что Мохарра не сканировал мои аннотированные классы. Я понял, что мне нужно установить атрибут <faces-config ... metadata-complete="false"> в false. Теперь это работает, но только если я запускаю свое приложение с целью mvn tomcat:run-war, а не с динамическим проектом mvn tomcat:run, который более удобен для разработки. В спецификации JSP 2.0 сказано, что:

Если элемент в файле WEB-INF /face-config.xml содержит атрибут metadata-complete, значение которого равно «true», реализация не должна выполнять аннотацию сканирование любых классов, кроме тех, которые предусмотрены самой реализацией. В противном случае продолжайте как следующим образом.

Если среда выполнения обнаруживает конфликт между записью в ресурсах конфигурации приложения и аннотацией, запись в ресурсах конфигурации приложения имеет приоритет. Все классы в WEB-INF / классах должны быть отсканированы.

Для каждого jar-файла в каталоге WEB-INF / lib приложения, если jar-файл содержит «META-INF /face-config.xml» файл или файл, который соответствует регулярному выражению ". * .face-config.xml" (даже пустому), все классы в эта банка должна быть отсканирована.

Но это ничего не говорит о динамических проектах, работающих в среде сборки maven :)! У кого-нибудь есть решение этой проблемы?

Приветствия

Кевин

Ответы [ 3 ]

2 голосов
/ 21 августа 2012

У меня тоже была эта проблема, но я обнаружил, что добавление цели war: inplace помогло мне. то есть используйте

mvn clean war:inplace tomcat:run

вместо просто 'tomcat: run', и все должно работать нормально.

0 голосов
/ 24 октября 2018

Добавление org.apache.myfaces.annotation.SCAN_PACKAGES исправило цель tomcat7:run для меня

0 голосов
/ 02 октября 2018

В моем случае Log4jServletContainerInitializer в log4j-web каким-то образом препятствовал вызову FacesInitializer в javax.faces, который отвечает за обработку аннотированных классов JSF.

Использование tomcat8-maven-plugin и встроенного tomcat 8.0.52.

war:inplace работал или просто удалял log4j-web (с ручной инициализацией log4j и управлением контекстом).

...