我正在使用maven在Eclipse中创建一个动态web应用程序。我添加了一些文件夹,如src/test/java和src/test/resources。我还更改了Java Build Path中的库,以获得JavaSE-1.7。到这里都没问题。

当我试图改变项目Facet动态Web模块时,出了问题。在同一个地方,我将Java更改为1.7。它仍然告诉我,不能将项目facet动态Web模块的版本更改为3.0。

我已经改变了所有我认为会影响改变的东西。


当前回答

请打开Navigator视图并执行以下步骤

(Window > Show View > Other > General),然后发现在你的项目下有一个。settings文件夹,展开它,然后打开文件“org.eclipse.wst.common.project.facet.core.xml”,做下面的修改并保存文件。 将这一行中的动态web模块版本更改为2.5 - 将这一行中的Java版本更改为1.5或更高版本。

其他回答

对于不允许我在Eclipse (Mars)中更改项目facet Dynamic Web Module版本的问题,我的解决方案是:

禁用Maven性质 确保web.xml名称空间指向正确的版本 重新启用Maven Nature Maven»更新项目(或按Alt+F5)

这是pagurix的答案的一个变体,但使用的是日食火星。

将web.xml文件更改为web.bak

忽略错误,我们接下来将重新生成它。

进入项目属性->项目facet,将动态Web模块版本设置为您需要的版本。Eclipse现在允许您保存。

现在右键单击该项目。选择Java EE工具->生成部署描述符存根。

这将创建一个具有所需版本的新web.xml。

打开新的web.xml,将XML头和完整的web-app打开标记复制到原来的web.bak,删除新的web.xml,并将web.bak重命名为web.xml。

完成了。

我有同样的症状,但治疗方法不同。我试图将我的JSF 2.2.4/Spring 3.0 webapp升级到JSF 2.3,以便享受新的JSF websocket钩子,Eclipse(实际上是STS)不会合作。在Eclipse的Project Facets中,JSF 2.3从未可用,直到我按照前面的回答直接编辑了org.eclipse.wst.common.project.facet.core.xml文件——最高的是2.2。

这是我经历过的难关。我不知道这些都是必要的因为我根本不理解这些构型。

在Eclipse中,我经常收到一个可怕的警告,“当一个或多个已安装的facet的实现不可用时,修改一个面项目可能会导致项目损坏。”你确定要继续吗?”这促使我进行更频繁的提交,但没有发生损坏。

在POM、Eclipse编译器和Eclipse Project Facets中将JDK从1.7升级到1.8。 更新以下Maven依赖项: <依赖> < groupId > javax.servlet < / groupId > < artifactId > servlet api < / artifactId > <版本> 2.4版本> < / < >范围提供了> < /范围 < / >的依赖 ... : <依赖> < groupId > javax.servlet < / groupId > < artifactId > javax.servlet-api < / artifactId > <版本> 4.0.0 > < /版本 < >范围提供了> < /范围 < / >的依赖

... 和…

    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.4</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.4</version>
    </dependency>

... :

    <dependency>
        <groupId>javax.faces</groupId>
        <artifactId>javax.faces-api</artifactId>
        <version>2.3</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.faces</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>2.0</version>
    </dependency>

我必须更新我的web.xml命名空间声明:

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

... :

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

我不得不更新项目facet ->动态Web模块从2.5到3.0。我尝试了3.1,但出现了错误。

In this process I frequently got the error in the title of this post, "Cannot change version of project facet Dynamic Web Module to 3.0" and Eclipse refused to compile the project or offer JSF 2.3 in the Project Facets. When I edited the org.eclipse.wst.common.project.facet.core.xml file as directed the errors disappeared, Eclipse offered JSF 2.3 in Project Facets, and the project compiled and ran fine on Tomcat 9.0.8. However, Project Facets still warned "Implementation of version 2.3 of project facet jst.jsf could not be found. Functionality will be limited." I suspect this simply means that autocomplete and other Eclipse conveniences will not be available because it cannot find the JSF 2.3 implementation declared in my POM.

希望这能帮助到一些人。谷歌搜索只找到了Ali Bassam和BalusC间接提供的这篇文章。

在我的例子中,web.xml是由dtd引用的。在我将此更改为xsd引用后,就像悉尼发布的那样,它工作了。

请打开Navigator视图并执行以下步骤

(Window > Show View > Other > General),然后发现在你的项目下有一个。settings文件夹,展开它,然后打开文件“org.eclipse.wst.common.project.facet.core.xml”,做下面的修改并保存文件。 将这一行中的动态web模块版本更改为2.5 - 将这一行中的Java版本更改为1.5或更高版本。