Maven tomcat:运行目标和基于jsf注释的组件/转换器/验证器扫描

时间:2010-12-10 13:10:30

标签: tomcat configuration maven jsf-2

我正在开发一个JSF 2.0应用程序(Mojarra + Primefaces)并使用maven构建环境。在我使用faces-config.xml文件注册我的自定义转换器和验证器之前,到目前为止一切顺利。然后我看到了一些JSF 2.0的语法糖 - 基于注释的配置方法。现在我想使用它,而不是xml配置文件。一个问题是Mojarra没有扫描我的注释类。我发现我需要将<faces-config ... metadata-complete="false">属性设置为false。现在它可以工作,但前提是我以mvn tomcat:run-war目标启动我的应用程序而不是mvn tomcat:run动态项目,这对于开发更为舒适。 JSP 2.0的规范说:

  

如果是WEB-INF / faces-config.xml文件中的元素   包含元数据完整属性,其值为“true”,实现不得执行注释   扫描任何类,除了实现本身提供的那些类。否则,继续   如下:

     

如果运行时发现应用程序配置资源中的条目与注释之间存在冲突,则   应用程序配置资源中的条目优先。   必须扫描WEB-INF / classes中的所有类。

     

对于应用程序的WEB-INF / lib目录中的每个jar,如果jar包含“META-INF / faces-config.xml”   文件或与正则表达式“。*。faces-config.xml”(即使是空的)匹配的文件,所有类都在   必须扫描那个罐子。

但它没有说明在maven构建环境中运行的动态项目:)!有没有人有这个问题的解决方案?

干杯,

凯文

3 个答案:

答案 0 :(得分:2)

我也有这个问题,但发现添加战争:inplace目标让它对我有用。即使用

mvn clean war:inplace tomcat:run

而不仅仅是'tomcat:run',它应该可以正常工作。

答案 1 :(得分:0)

在我的情况下,Log4jServletContainerInitializer中的log4j-web某种程度上阻止了FacesInitializer中的javax.faces的调用,这负责处理带注释的JSF类。

使用tomcat8-maven-plugin和嵌入式tomcat 8.0.52。

war:inplace有效,或者仅通过手动log4j初始化和上下文管理删除了log4j-web

答案 2 :(得分:0)

添加org.apache.myfaces.annotation.SCAN_PACKAGES对我来说是tomcat7:run的目标