当我在JBoss AS 7.1.1中部署我的.war文件并调用时
FacesContext.class.getPackage().getImplementationTitle()
Run Code Online (Sandbox Code Playgroud)
和
FacesContext.class.getPackage().getImplementationVersion()
Run Code Online (Sandbox Code Playgroud)
当我在tomcat上部署它时,我会得到一个不同的版本.
JBoss:JSF JavaServer Faces API 2.0.1.Final
Tomcat:JSF Mojarra 2.0.6-FCS
看来JBoss没有选择我所拥有的正确的JAR WEB-INF\lib\.这会导致我的网站出现不同的行为.我试着解决这个问题
<context-param>
<param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
<param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
但那没用.我用JBoss 71阅读了替代JSF实现,但显然它在7.1.1中没有解决.
我添加jboss-deployment-structure.xml到WEB-INF\包含以下内容.
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="javax.faces.api" slot="main"/>
<module name="com.sun.jsf-impl" slot="main"/>
</exclusions>
<dependencies>
<module name="org.apache.commons.logging" />
<module name="org.apache.commons.collections" />
<module name="org.apache.log4j" />
<module name="org.dom4j" />
<module name="javax.faces.api" slot="1.2"/>
<module name="com.sun.jsf-impl" slot="1.2"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)
但是我的应用程序没有部署,我收到以下错误server.log:
14:06:14,733 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-4) Critical error during deployment: : com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! Class org.jboss.as.web.deployment.jsf.JandexAnnotationProvider is not an instance of com.sun.faces.spi.AnnotationProvider
at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:357) [jsf-impl.jar:2.0.6-FCS]
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决我的问题?
是否还有其他依赖于 JSF API 的东西?我不确定为什么 JBoss 和 Tomcat 之间会有所不同,但尝试在排除或不排除 JSF 的情况下运行 mvn dependency:tree 和 mvn dependency:analyze 。