2014-01-14 1 views
1

JSF (com.sun.faces 2.1.12) не может найти аннотированные классы в target/classes при запуске с помощью плагина tomcat7 maven (v2.2).Как я могу убедить com.sun.faces сканировать каталог целевых/классов для @ManagedBeans при использовании tomcat7: run?

Когда мы отлаживаем, мы запускаем приложение с помощью модуля tomcat7: run с Maven. Когда плагин tomcat7 создает путь к классам для webapp при его запуске, он добавляет цель/классы в путь класса webapp как каталог классов и настраивает src/main/webapp как корневой каталог webapp. Это означает, что нет классов в WEB-INF/классах, а сканер аннотации com.sun.faces не сканирует цель/классы для @ManagedBeans.

Я попытался обмануть сканер аннотаций в сканирование цели/классов, добавив META-INF/faces-config.xml в src/main/resources. Это почти сработало, поскольку MET-INF/faces-config.xml был найден в target/classes, но com.sun.faces.config.ConfigManager.ProvideMetadataToAnnotationScanTask пропустил его, потому что он не был в банке. Мне трудно найти код, который сканирует WEB-INF/classes.

Как убедить com.sun.faces сканировать каталог целевых/классов для @ManagedBeans?

ответ

0

какая версия плагина вы используете? Это обычно фиксируется в 2.2 (см. http://tomcat.apache.org/maven-plugin-2.2/tomcat7-maven-plugin/run-mojo.html#jarScanAllDirectories) Если бы вы не смогли создать проблему с образцом проекта? Благодаря

+0

@olamay, благодарю вас за ответ. Я использую версию 2.2 плагина (вопрос обновлен). Проблема не в том, что работает JAR-сканирования. Проблема в том, что файлы классов с аннотацией находятся в target/classes, а не в WEB-INF/классах, поэтому они не найдены аннотами Faces, потому что они будут выглядеть только в JAR и WEB-INF/classes, а не в других каталогах классов , – Victor

0

Создать в вашем проекте Maven файл SRC/главная/tomcatconf/context.xml со следующим содержанием:

<?xml version='1.0' encoding='utf-8'?> 
<Context> 
    <Resources 
     className="org.apache.naming.resources.VirtualDirContext" 
     extraResourcePaths="/WEB-INF/classes=target/classes"/> 
</Context> 

котом 7 Maven плагин просматривает этот файл при запуске. Реализация org.apache.naming.resources.VirtualDirContext интерфейса Context позволяет отображать каталоги в определенные места ресурсов. В этом случае сопоставьте каталог классов проекта с ресурсом/WEB-INF/classes.

+0

Роджер, я был очень рад вашему ответу, поскольку казалось, что это сработает. К сожалению, я не могу заставить его работать. Я вижу, где JSF в конечном итоге делегирует ApplicationContext, который ищет JNDI для «/ WEB-INF/classes /», но он не находит ничего под этим именем. Какие-либо предложения? – Victor

+0

Выполнять аннотации, такие как '@ Named'? Я использую MyFaces 2.2.x и не пробовал аннотацию '@ ManagedBean'. – roger

+0

И вы проверили, что в вашем /META-INF/context.xml нет элемента ''. В противном случае это может быть перезаписано вами в файле /src/main/tomcatconf/context.xml. – roger

Смежные вопросы