常常被一个问题困扰:
JavaServer Faces 2.2 can not be installed : One or more constraints have not been satisfied.
JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer
eclipse里面是这样子的:


经过Type来看是由于maven的配置致使的。
今天决定解决这个问题:
以前作的一些尝试:打算选择搞版本的Dynamic Web Module,可是报错,说是和其余组件冲突。
因而你须要作两件事情:
1. 修改web app版本;
maven默认生成的web.xml中webapp的版本是2.3的:
1 <!DOCTYPE web-app PUBLIC 2 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 3 "http://java.sun.com/dtd/web-app_2_3.dtd" >
修改成web-app为4.0版本:
1 <!DOCTYPE web-app PUBLIC 2 "-//Sun Microsystems, Inc.//DTD Web Application 4.0//EN" 3 "http://java.sun.com/dtd/web-app_4_0.dtd" >
其实只要是3.0以上就能够,我这里写的是4.0,最新版本的
开始好用,可是当工程从新被打开后,又报错,因而修改成(!DOCTYPE部分删掉):
1 <webapp xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
其实你能够到http://java.sun.com/dtd/上面去看看(如今已经跳抓到了oracle java的页面)里面根本没有web-app_
4_0.dtd,最高版本为2.3,致使Dyanmaic Web module最高版本只能配置到2.3;因此dtd的格式是没法知足Java Server Factes的要求;因而须要改dtd声明为xsd的声明。
而后在工程右键,而后在Project Facts的页面取消勾选Dynamic Web Module;而后更新工程,问题解决了。其实你回到Project Facts里面看到Dynamic Web Module又重新勾选上了,只不过版本成为了3.1;能够看出来eclipse的这个wst组件处理逻辑就是从web.xml文件中读取定义的web-app版本(由于Dynamic Web Module是web的模板,因此读web.xml);而后设置对应的版本号,当发现自身最高版本是3.1(我用的是Neon.1a Release (4.6.1),貌似最高就是3.1)因而设置为了最高版本。
以前报错的缘由就是由于须要2.5以上版本的Dynamic Web Module(推测是由于maven的web模板要求的);可是由于web.xml里面的DTD限制了web app的版本,即限制了Dynamic Web Module的版本;因而爆了那个错误;提升了web.xml的版本以后,在取消勾选就是让wst组件本身再去重置一下该版本。
参考