【问题标题】:Maven tomcat:run goal and jsf annotation based component/converter/validator scanningMaven tomcat:run 目标和基于 jsf 注解的组件/转换器/验证器扫描
【发布时间】:2011-05-23 11:44:23
【问题描述】:

我正在开发一个 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 构建环境中运行的动态项目 :)!有没有人可以解决这个问题?

干杯,

凯文

【问题讨论】:

    标签: tomcat configuration maven jsf-2


    【解决方案1】:

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

    mvn clean war:inplace tomcat:run
    

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

    【讨论】:

      【解决方案2】:

      在我的例子中,log4j-web 中的 Log4jServletContainerInitializer 以某种方式阻止了 javax.faces 中的 FacesInitializer 被调用,它负责处理带注释的 JSF 类。

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

      war:inplace 工作,或者只是删除 log4j-web(使用手动 log4j 初始化和上下文管理)。

      【讨论】:

        【解决方案3】:

        添加 org.apache.myfaces.annotation.SCAN_PACKAGES 为我修复了 tomcat7:run 目标

        【讨论】:

          猜你喜欢
          • 2013-10-17
          • 2012-08-19
          • 2013-05-14
          • 1970-01-01
          • 2011-10-14
          • 1970-01-01
          • 2012-02-01
          • 2015-01-10
          • 1970-01-01
          相关资源
          最近更新 更多