JavaServer Faces 2.2需要动态Web模块2.5或更高版本

时间:2014-03-12 18:44:20

标签: eclipse maven jsf configuration

我尝试了一些东西,但这个问题仍然存在。我正在使用Eclipse Kepler。我在导入maven项目时出现以下错误

  

无法安装JavaServer Faces 2.2:未满足一个或多个约束

     

JavaServer Faces 2.2需要动态Web模块2.5或更高版本

1)我尝试了Maven Java EE Configuration Marker with Java Server Faces 1.2中提到的一些事情,但没有运气。 2)我也进入.settings并修改了org.eclipse.wst.common.project.facet.core.xml并修改了jst.web以指向2.5或3.0版本;但我还有其他一些错误。

我试图让Sencha GXT示例在基于http://neiliscoding.blogspot.ie/2012/05/how-to-setup-examples-for-use-in-gxt-3.html的maven / eclipse构建中工作,并且让这个javaserver在eclipse中遇到问题。 这是我的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<!-- POM file generated with GWT webAppCreator -->
<modelVersion>4.0.0</modelVersion>
<parent>
    <artifactId>xx</artifactId>
    <groupId>ss</groupId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<artifactId>guis</artifactId>
<packaging>war</packaging>

<name>GWT Maven Archetype</name>

<properties>
    <!-- Convenience property to set the GWT version -->
    <gwtVersion>2.5.1</gwtVersion>
    <!-- GWT needs at least java 1.5 -->
    <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>com.google.gwt.inject</groupId>
        <artifactId>gin</artifactId>
        <version>2.1.2</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>

    <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt-servlet</artifactId>
        <version>${gwtVersion}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt-user</artifactId>
        <version>${gwtVersion}</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt-dev</artifactId>
        <version>${gwtVersion}</version>
        <scope>provided</scope>
    </dependency>


    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.7</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
        <classifier>sources</classifier>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.sencha.gxt</groupId>
        <artifactId>gxt-chart</artifactId>
        <version>3.0.1</version>
    </dependency>

    <dependency>
        <groupId>com.sencha.gxt</groupId>
        <artifactId>gxt</artifactId>
        <version>3.0.1</version>
    </dependency>

    <dependency>
        <groupId>com.sencha.gxt</groupId>
        <artifactId>uibinder-bridge</artifactId>
        <version>2.4.0</version>
    </dependency>



</dependencies>

<build>
    <!-- Generate compiled stuff in the folder used for developing mode -->
    <outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>

    <plugins>

        <!-- GWT Maven Plugin -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <version>2.5.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test</goal>
                        <!-- <goal>i18n</goal> -->
                        <goal>generateAsync</goal>
                    </goals>
                </execution>
            </executions>
            <!-- Plugin configuration. There are many available options, see gwt-maven-plugin 
                documentation at codehaus.org -->
            <configuration>
                <runTarget>guis.html</runTarget>
                <hostedWebapp>${webappDirectory}</hostedWebapp>
                <i18nMessagesBundle>com.harmonia.client.Messages</i18nMessagesBundle>
            </configuration>
        </plugin>

        <!-- Copy static web files before executing gwt:run -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <!-- <goals> <goal>exploded</goal> </goals> -->
                </execution>
            </executions>
            <configuration>
                <webappDirectory>${webappDirectory}</webappDirectory>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

这是我的web.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
  <!-- <!DOCTYPE web-app
 PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app> -->

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
                    version="3.0">
<display-name>GXT Created Web Application</display-name>



<!-- Default page to serve -->
<welcome-file-list>
    <welcome-file>guis.html</welcome-file>
</welcome-file-list>

正如您所看到的,我在上面的web.xml中尝试了不同的dtd,但我仍然遇到了问题。非常感谢任何提示

12 个答案:

答案 0 :(得分:25)

我也遇到过Maven项目。这是解决问题所必须做的事情:

首先更新您的web.xml,如ThorbjørnRavnAndersen所述。我使用的是3.0版本,如下所示:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
                        version="3.0">
    <display-name>Servlet 3.0 Web Application</display-name>
</web-app>

然后右键单击您的项目并选择属性 - &gt;项目方面 在那里,您将看到动态Web模块的版本。这需要从版本2.3或其他版本更改为版本2.5或更高版本(我选择3.0)。

但要做到这一点,我必须取消选中动态网络模块的勾选框 - &gt;单击应用,然后对项目执行Maven更新。回到Project Facets窗口,它应该已经匹配你的web.xml配置 - 在我的情况下为3.0。如果没有,你应该能够改变它。

如果这对您不起作用,请尝试右键单击Dynamic Web Module Facet并选择更改版本(并确保它未锁定)。

希望有效!

答案 1 :(得分:20)

您的问题是您已将web.xml标记为符合servlet 2.3(或者甚至不是 - 我不确定您的注释中的doctype是如何解释的)

 <?xml version="1.0" encoding="UTF-8"?>
  <!-- <!DOCTYPE web-app
 PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">

并且您需要至少使用servlet 2.5才能使Eclipse工具正常工作。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

(未经测试 - 从http://javahowto.blogspot.dk/2009/10/sample-webxml-servlet-25.html复制)

您可能需要重新创建Eclipse项目以获取更改。

答案 2 :(得分:2)

我遇到了同样的问题,在我的web.xml中有2.5版,而项目有(右键单击Project-&gt; Properties-&gt; Progect Facets-&gt;)动态Web模块2.3。虽然我试图将版本从2.3更改为2.5但ECLIPSE不允许这样做。

Solution:我删除了动态网络模块标题下的复选标记,我已保存并且我有更新项目。自动重新唤醒正在进入具有正确版本的框。

答案 3 :(得分:2)

我为此问题找到的解决方案是

1)右键单击项目&gt;属性&gt;取消选中动态Web模块&gt;应用并关闭。

2)右键单击项目&gt; Maven&gt;更新项目...

答案 4 :(得分:1)

我自己的解决方案是将严格依赖放在pom.xml中。

如果项目在facet中声明为3.1 Web Dynamic Project,则java.servlet-api依赖项也必须是3.1.0(或3.1.x)版本。

在我的情况下,我留下了3.0.1版本,从而在&#34;问题&#34;中引出了这个特定的错误信息。观点:

无法将项目构面动态Web模块的版本更改为3.0。   一个或多个约束条件尚未得到满足。

(当然要确保你的web.xml也必须是3.1)。

答案 5 :(得分:1)

我的项目面临同样的问题。我更改了web.xml,如下所示:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
                    version="3.0">
<display-name>Archetype Created Web Application</display-name>

错误仍然存​​在。但在遵循以下链接中提出的建议后,问题得以解决。

http://crunchify.com/how-to-fix-cannot-change-version-of-project-facet-dynamic-web-module-to-3-0-error-in-eclipse/

答案 6 :(得分:1)

试试这个: 在Eclipse中删除项目。删除Eclipse项目,而不是您的应用程序!它应该从项目列表中消失。 在Windows资源管理器中找到项目目录并删除目录.settings和target(如果找到)并删除文件.project和.classpath。 回到Eclipse,导入现有的Maven项目。这就是全部!

假设您的web.xml具有正确的标题&lt; web-app&gt;到您的目标JSF版本。

答案 7 :(得分:0)

**打开项目的pom.xml并添加此插件标记 最后,右键单击您的项目&gt; Maven&gt;更新项目......

<build>
<plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>
</plugins>

**

答案 8 :(得分:0)

我遇到了这个问题,ThorbjørnRavnAndersen的回答没有帮助,因为我已经在Dynamic Web Module 2.5。几年前我遇到过同样的问题并放弃了。决定重新调查我最初做的是尝试通过取消选中来删除对“动态Web模块”的支持 - 但是嘿,它被锁定了?所以我解锁了它并禁用/取消选中它。然后我解锁了JavaServer Faces,取消选中它,点击申请 - 没有爆炸!用手指交叉,然后重新检查动态Web模块并将其设置为3.1。然后我重新检查了JavaServer Faces,将其设置为2.2。点击申请 - 没有“大坏蛋热潮”,它有效 - 盈利!希望这可以帮助其他任何有同样问题的人,也不依赖于调整XML文件。

注意我也确实将java分面版本设置为1.8以及它是必需的。

答案 9 :(得分:0)

对我来说,以前没有工作。

然后我找到了此链接: https://crunchify.com/how-to-fix-cannot-change-version-of-project-facet-dynamic-web-module-to-3-0-error-in-eclipse/

对我来说,与该链接中所描述的几乎相同。

  • 转到您的Eclipse工作区位置
  • 打开文件/.settings/org.eclipse.wst.common.project.facet.core.xml。
  • 将jst.web属性的版本修改为2.5
  • 回到日食
  • 右键单击项目
  • 刷新
  • 点击项目
  • 选择“清洁”
  • 右键单击项目名称
  • 单击Maven
  • 更新项目

我遇到的问题

答案 10 :(得分:0)

我有相同的错误,并且已解决以下问题:

步骤1:更新web.xml文件,并添加以下代码

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
</web-app>

第2步:在项目文件夹上单击鼠标,然后选择 属性 ,然后搜索“项目构面” 。您需要取消选中“动态Web模块”,然后应用并关闭它。 See Eclipse properties

第3步:更新您的Maven,然后就可以了。

答案 11 :(得分:0)

我按照以下步骤进行操作。

右键单击项目->属性->项目构面。标记动态Web模块 JavaServer Faces ,然后选择项目的版本。 (如果收到消息无法更改项目构面动态Web模块的版本,请执行下一个教程How to fix Cannot change version of project facet Dynamic Web Module

删除 web.xml 文件,然后右键单击项目-> Java EE工具->生成部署描述符存根

从eclipse中删除项目(不要删除源),然后在项目根目录级别执行:

mvn eclipse:clean
mvn eclipse:eclipse
mvn clean install -X

将项目重新导入为现有Maven项目

我的web.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0">
    <display-name>jsf-sample</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>