347

我正在使用 maven 在 Eclipse 中创建动态 webapp。我添加了一些文件夹,例如src/test/javasrc/test/resources。我还更改了 Java Build Path 中的库以获取 JavaSE-1.7。到这里一切都好。

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

我已经改变了一切会影响我认为的改变的东西。

4

31 回答 31

613

另一种方法是编辑项目方面配置文件本身:org.eclipse.wst.common.project.facet.core.xml

将此行中的动态 Web 模块版本更改为 3.0 -<installed facet="jst.web" version="2.5"/>

接着:

  1. 右键单击项目(在Project Explorer面板中)。
  2. 选择Maven » 更新项目(或按Alt+F5

您将.settings在 Eclipse 项目的目录中找到该文件。

于 2013-09-05T09:01:41.830 回答
321

我更新了我的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>Servlet 3.0 Web Application</display-name>
</web-app>

然后只是Maven -> 更新项目 ...

于 2013-08-21T15:34:03.397 回答
181

我想我和你有同样的问题。我的 web.xml 有 2.5 版,而项目有(右键单击 Project-> Properties-> Project Facets->)Dynamic Web Module 2.3。

虽然我试图将版本从 2.3 更改为 2.5,但 ECLIPSE 不允许这样做。解决方案:我删除了标题动态 Web 模块下的复选标记,我保存了更新项目。自动重新唤醒是输入正确版本的框。我使用 Eclipse 开普勒。

ps:看看下面乔纳森的评论,很有用。

于 2014-02-04T08:57:29.817 回答
53
  1. 单击您的项目文件夹。
  2. 转到窗口 > 显示视图 > 导航器
  3. 转到导航器并展开 .settings 文件夹
  4. 打开org.eclipse.wst.common.project.facet.core.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <faceted-project>
      <fixed facet="wst.jsdt.web"/>
      <installed facet="jst.web" version="2.3"/>
      <installed facet="wst.jsdt.web" version="1.0"/>
      <installed facet="java" version="1.8"/>
    </faceted-project>
    
  5. 像这样更改版本 <installed facet="jst.web" version="3.1"/>

  6. 节省
  7. 只需更新您的项目。右键单击项目文件夹 > Maven > 更新项目 > 选择项目并单击“确定”

只是这对我有用。

于 2017-01-21T11:32:18.457 回答
45

我遇到了同样的问题,我什至尝试删除该项目并再次添加它。诀窍是删除.settings目录。

于 2013-11-22T13:47:35.417 回答
27

删除

.settings 
.classpatch 
.projejct 
target

并再次导入 Maven 项目。

于 2014-09-03T07:23:59.003 回答
23

什么对我有用:

  1. 将 Java 更改为 1.8(或 1.7)

在您的 POM 中 - 您必须在以下<build>部分将编译器插件设置为 1.8(或 1.7)版本:

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

确保更改 Java Build 显示 1.8。如果没有 - 单击编辑并选择它应该是什么。

在此处输入图像描述

  1. 修改 web.xml,以便在版本和链接中引用 3.0

在此处输入图像描述

  1. 确保在 Project Facets 中将 Java 设置为 1.8

在此处输入图像描述

  1. 在这个阶段我仍然无法更改动态 Web 模块;

而不是改变它:

a)取消选中动态 Web 模块

b)申请

c)再次检查。应设置新版本 3.0。**

在此处输入图像描述

申请并再次检查后:

在此处输入图像描述

希望这可以帮助。

于 2016-12-23T07:41:00.030 回答
15

右键单击项目属性;在Project Facets中,取消选择Dynamic Web Module(版本应为3.1)并取消选择JavaServer Faces(版本为2.2)。

改变这个:

<web-app version="3.1" 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">

对此:

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

然后去掉前面的前缀param-name之类的。

最后,Maven ->更新项目

于 2015-05-02T01:57:19.247 回答
8

请打开导航器视图并执行以下步骤

  1. (Window > Show View > Other > General)发现你的项目下有一个.settings文件夹,展开后打开文件“org.eclipse.wst.common.project.facet.core.xml”,使以下更改并保存文件。
  2. 将此行中的动态 Web 模块版本更改为 2.5 -
  3. 将此行中的 Java 版本更改为 1.5 或更高版本 - .
于 2013-11-28T09:30:16.907 回答
6

从项目结构 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> Servlet 3.0 Web Application 打开 web.xml

并更新 web.xml 文件,例如更改 version = "2.5"

还要从您的项目 .settings 文件中更改 org.eclipse.wst.common.project.facet.core.xml 文件按照步骤 1. Window > Show View > Other > General > Navigator

  1. 您的项目目录下有一个 .settings 文件夹

  2. 将此行中的动态 Web 模块版本更改为 2.5 4.将此行中的 Java 版本更改为 1.5 或更高版本

现在刷新您的项目并设置为在您的服务器上运行。

请关注解决方案的博客 http://scrapillars.blogspot.in/2014/02/how-to-change-project-facet-in-eclipse.html

解决方案是用图像插图制作的

于 2014-02-24T06:29:38.190 回答
6

对我来说解决这个问题的最佳和简单的步骤是 1)属性->项目方面-> 取消选择/取消选中动态 Web 模块的复选框-> 应用 2) 现在更改为所需的版本应用 3) 选中动态 Web 模块复选框..--现在你完成了--

于 2016-03-31T05:34:20.800 回答
4

他们是解决此问题的另一种方法(检查一下,希望它可以帮助您解决问题)

问题

无法将项目方面动态 Web 模块 2.3 的版本更改为 3.0

解决方案

  1. 转到您的项目位置(例如-D:/maven/todo)
  2. 转到 .setting 文件夹
  3. 检查这个文件:org.eclipse.wst.common.project.facet.core.xml
  4. 打开文件并将“jst.web”属性从 2.3 更改为 3.0,然后保存
  5. 右键项目刷新项目并更新maven
  6. 完毕!!!....
于 2016-11-29T09:19:39.847 回答
3

web.xml 技巧之所以有效,是因为您现在明确告诉 WTP 您正在使用该特定 servlet 版本,而不管容器支持什么。

就我而言,我在 Maven 项目中使用注释配置,并且没有 web.xml 文件。事实证明,在没有 web.xml 的情况下,WTP 会查看您的 Maven 依赖项以确定要使用的 Servlet 版本。就我而言,我定义了以下内容:

<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-api</artifactId>
  <version>7.0</version>
  <scope>provided</scope>
</dependency>

将其更改为 6.0 解决了问题,现在它使用 Servlet 3.0 而不是 3.1,这是 JavaEE 7 的默认值。由于我必须从 Tomcat 8 转到 Tomcat 7,因此 Tomcat 7 仅支持 JavaEE 6 Web 配置文件。现在一切都很好。

于 2014-02-14T13:28:52.653 回答
3

我遇到了同样的问题,仅编辑 web.xml 以及更改 .settings 文件夹中的文件并没有帮助。我的解决方案是通过编辑 pom.xml 直接指向 maven 编译器插件以使用所需的 java 版本:

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

现在运行 Maven->Update project,然后您可以在 properties->project facets->Dynamic Web module version 中更改 servlet 版本,或者如前所述,通过手动编辑 org.eclipse.wst.common.project.facet.core。 xml 在项目的 .settings 文件夹中。

于 2015-01-22T12:54:46.120 回答
2

在我的例子中,web.xml 被一个 dtd 引用。在我将其更改为 xsd 参考后,就像悉尼发布的那样,它起作用了。

于 2013-11-22T10:41:07.580 回答
2

我有同样的问题,删除 .settings 文件夹解决了这个问题

于 2016-07-28T15:24:04.117 回答
2

当我尝试将一般 Java Project 转换为Maven Project时出现此错误。

我所做的是确定我的项目所需的 Java 编译器版本。对于我的项目,最低 Java 版本是1.8.

通过将版本降低到低于1.8我的 IDE 将开始抱怨它无法识别一堆导入的库,因此我确定我的最低 Java 版本为1.8

1. Right click your project
2. Go to Properties
3. Left hand-side panel, click "Project Facets"
4. For Java, set the version according to your minimum version

在此处输入图像描述

现在确保 Java 编译器版本使用与您在 Project Facets 中设置的相同的 Java 版本。

1. Right click your project
2. Go to Porperties
3. Left hand-side panel, click "Java Compiler"
4. Make sure Java Compiler version is the same. 
5. If it is not the same, change the version. (Uncheck "Use compliance from execution environment' if needed to make the changes.

在此处输入图像描述

更改后,错误应该得到解决。如果错误仍然存​​在,请右键单击项目 -> Maven -> 更新项目

于 2019-07-25T12:17:18.997 回答
1

对于 maven eclipse web 项目,更改动态 web 模块版本需要检查三个地方。如果一个人使用 eclipse,并且在您检查了以下内容之后: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">

2)行家:

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>   ## ensure you have tomcat 7 not other version
</dependency>

<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.0</version>
      <configuration>
            <source>1.7</source> ## at least 6
            <target>1.7</target>
      </configuration>
</plugin>

3)eclipse构建路径和编译器版本为1.7

你在 Maven 上仍然有一个错误标记:

cannot change version of project facet dynamic web module to 3.0 one or more constrants have not been satisfied

然后您可以:取消选中动态 Web 模块,然后重新选中它。我认为这是因为 Eclipse 文件的 .settings 以某种方式损坏了。关于第二个提示tomcat哪个版本好记。

于 2016-10-26T01:56:34.817 回答
1

我在这里尝试了很多答案,但没有一个对我有用。然后我在这里找到了一篇关于我的问题的文章。我也想在这里分享。

以下是简要采取的步骤。

  1. 设置编译器合规级别。
  2. 更新项目方面
  3. 从首选项更新已安装的 JRE
  4. 在 pom.xml 中添加配置以使用 java 1.7,最后
  5. 从 Maven 更新项目。
于 2016-02-29T13:29:05.520 回答
1

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

  • 禁用 Maven 自然
  • 确保 web.xml 命名空间指向正确的版本
  • 重新启用 Maven Nature
  • Maven » 更新项目(或按 Alt+F5)
于 2016-01-13T16:21:16.907 回答
1

如果悉尼的回答仍然没有帮助,请在下面尝试。按照悉尼的回答后,转到 Properties > Projects Facets 取消选择 Dynamic Web Module 然后更改版本以匹配您的 web.config 然后再次选择。应用 > 保存然后 Maven 更新。

web.xml

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

<display-name>JavaServerFaces</display-name>

<!-- Change to "Production" when you are ready to deploy -->
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

<!-- Welcome page -->
<welcome-file-list>
    <welcome-file>jsfs/hello.xhtml</welcome-file>
</welcome-file-list>

<!-- JSF mapping -->
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<!-- Map these files with JSF -->
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>jsfs/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

于 2016-02-22T12:44:44.200 回答
0

Doing maven update or reimporting the project did not help. @Sydney's answer is right; in addition I have to recreate the project in different workspace as said in JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer

于 2014-03-12T22:07:37.767 回答
0

打开 org.eclipse.wst.common.project.facet.core.xml 文件并将 jst.web 版本更改为 3.0。还将 web.xml 更新到 3.0 版。保存并更新项目。希望这可以帮助。我正在使用 Eclipse Juno

于 2015-05-18T12:53:05.763 回答
0

我通过使用正确的版本、xsd 位置修改 web.xml并使用正确的版本修改 org.eclipse.wst.common.project.facet.core.xml并执行maven update解决了这个问题。

于 2017-06-24T09:56:51.283 回答
0

只是想分享一下我自己的经验,发现我的Dynamic Web Module被锁定了,通过以下步骤解决:

第一的

  • 右键单击项目 > 属性 > 项目构面 > 右键单击​​动态 Web 模块 > 解锁 > 应用并关闭

第二

  • 右键单击项目 > Maven > 更新项目 > 确定
于 2020-08-21T08:48:57.897 回答
0

我的Web Module 3.0web.xml,但在properties>Dynamic Web Module它打开了3.1

我将其更改web.xml为:

<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

进行此更改后,请执行以下操作:right click on project>Maven>Update Project...

于 2016-02-21T17:38:57.383 回答
0

我有同样的症状,但用了不同的治疗方法。我试图将我的 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 中,我经常收到一个可怕的警告,“当一个或多个已安装的分面的实现不可用时修改分面项目可能会导致项目损坏。您确定要继续吗?” 这促使我进行更频繁的提交,但没有发生损坏。

  1. 在 POM、Eclipse 编译器和 Eclipse Project Facets 中将 JDK 从 1.7 升级到 1.8。
  2. 更新以下 Maven 依赖项:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.4</version>
        <scope>provided</scope>
    </dependency>
    

    ... 至:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.0</version>
        <scope>provided</scope>
    </dependency>
    

... 和 ...

    <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">

我不得不将 Project Facets -> Dynamic Web Module 从 2.5 更新到 3.0。我尝试了 3.1,但出现错误。

在这个过程中,我经常收到这篇文章标题中的错误“无法将项目构面动态 Web 模块的版本更改为 3.0”,并且 Eclipse 拒绝编译项目或在项目构面中提供 JSF 2.3。当我按照指示编辑 org.eclipse.wst.common.project.facet.core.xml 文件时,错误消失了,Eclipse 在 Project Facets 中提供了 JSF 2.3,并且项目在 Tomcat 9.0.8 上编译并运行良好。但是,Project Facets 仍然警告“无法找到 project facet jst.jsf 的 2.3 版本的实现。功能将受到限制。” 我怀疑这仅仅意味着自动完成和其他 Eclipse 便利将不可用,因为它找不到在我的 POM 中声明的 JSF 2.3 实现。

希望这可以帮助某人。谷歌搜索只产生了 Ali Bassam 的这篇文章,而 BalusC 也间接提供了帮助。

于 2018-05-10T16:16:11.857 回答
0

这是 pagurix 答案的变体,但使用的是 Eclipse Mars。

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

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

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

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

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

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

完毕。

于 2016-01-26T10:45:23.063 回答
0

更新 Maven对我有用

选择项目然后按ALT+F5然后选择项目点击确定

于 2017-08-05T09:47:36.067 回答
0

这个问题版本右键单击项目->属性->项目方面->右键单击动态Web模块->解锁它->取消选中->选择2.5版本->应用->更新maven

于 2016-02-15T06:21:47.147 回答
-1

我遇到了同样的问题 - 我刚刚从我的工作区中删除了该项目,然后清理了“eclipse 文件/文件夹,例如:.project、.settings 等)然后再次导入了 maven 项目,它工作正常。

于 2019-02-08T10:31:48.383 回答