无法将Project Facet动态Web模块的版本更改为3.0?


329

我正在使用Maven在Eclipse中创建动态Web应用程序。我添加了一些文件夹,例如src/test/javasrc/test/resources。我还更改了Java Build Path中的库以获得JavaSE-1.7。到这里都可以。

当我尝试更改Projects Facet动态Web模块时,出现了问题。我在同一位置将Java更改为1.7。而且它仍然告诉我,无法将Project Facet动态Web模块的版本更改为3.0。

我已经改变了所有会影响我认为的改变的事物。


好。对此我感到抱歉。创建新Maven项目时,原型为maven-archetype-webapp,创建项目后,Project Facets中的Dynamic Web Module为2.3。我想将动态Web模块的版本更改为3.0,并且得到了“无法将项目构面动态Web模块的版本更改为3.0”
EdgarZeng

这对我
有用

在Eclipse Kepler中,当我右键单击“动态Web模块”构面时,它将显示“解锁”选项。解锁后,我可以更改构面版本。仅供参考。
乔纳森

这是蚀的错误吗?
CDT

Answers:


311

我更新了我的 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->更新项目...


64
web.xml的更新对我不起作用。@enkor给出的解决方案是:stackoverflow.com/a/18632054/378633
jplandrain 2014年

5
这是3.1 web.xml文件的有效头文件<?xml version =“ 1.0” encoding =“ UTF-8”?> <web-app xmlns:xsi =“ w3.org/2001/XMLSchema-instance ” xmlns = “ xmlns.jcp.org/xml/ns/javaee ” xsi:schemaLocation =“ xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd ” id =“ WebApp_ID“ version =” 3.1“>
Jakob Alexander Eichler

3
没有web.xml的项目呢?:)
Anand Rockzz '16

版本属性更改为3.0也不适合我
tequilacat

如果以上和以下解决方案均无效,请百分百地通过此链接。
拉基

587

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

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

然后:

  1. 右键单击项目(在“ 项目资源管理器”面板中)。
  2. 选择Maven»更新项目(或按Alt+F5

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


3
谢谢。实际上,我认为我们应该像上面一样做其他事情,在web.xml中更改Web模块的版本,否则,“ Deployment Descriptor”的版本将不会更改为3.0。那是Maven插件中的错误吗?
EdgarZeng

13
当您的项目中没有web.xml时,这似乎是解决此问题的唯一方法。
肖恩·舍伍德

3
我已经在web.xml中安装了3.0,并且STS仍然无法更新,而mvn更新也没有帮助。但是,此方法有效。
MiB 2014年

2
这有帮助,实际上转到-> org.eclipse.wst.common.project.facet.core.xml->删除所有条目-> maven更新项目。
virtuvious

7
您可以在application / project .settings文件夹中找到org.eclipse.wst.common.project.facet.core.xml文件。
Rushi Shah

175

我想我和你有同样的问题。我的web.xml的版本为2.5,而该项目的动态Web模块2.3为(右键单击Project-> Properties-> Project Facets->)。

尽管我尝试将版本从2.3更改为2.5,但ECLIPSE不允许这样做。解决方案:我删除了“动态Web模块”标题下的复选标记,保存并拥有“更新项目”。自动重新唤醒将输入具有正确版本的框。我使用Eclipse Kepler。

ps:看看下面乔纳森评论,非常有用。


1
太好了!它解决了我的问题,但是您能告诉我为什么它最初不允许设置动态模块的原因。
Suresh 2014年

26
@Suresh,我认为为什么不允许更改版本的问题是因为它已锁定。如果右键单击“动态Web模块”构面,它将显示“解锁”选项。解除锁定,取消选中DWM构面,重新应用构面并进行项目Maven更新后,错误消失了。
乔纳森

2
+1。没有这个极其重要的观点,这里的其他答案是徒劳的。只有我认为,乔纳森(Jonathan)的评论不应包含在答案中。
Gangnus 2015年

1
+1 @Jonathan您的提示完成了工作。您必须将其发布为答案,并且我们还应该将其发布给Eclipse!
aksappy

就我而言,这是可行的,为什么在Web模块pom中为Dnamic Web模块设置了另一个版本,所以这与白色项目配置相冲突
ocrampico

49
  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. 只需更新您的项目。右键单击项目文件夹> Maven>更新项目>选择项目,然后单击“确定”

只是这对我有用。


43

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


2
我也必须这样做。我正在使用具有基于Java的配置的Spring Web项目,因此对我而言无法更新web.xml。
bcody 2014年

为什么删除.setting后它能正常工作,您能否请exaplain
Abhijit Chakra,

该.settings目录包含许多内容,并且其中一些内容可能会随着时间而改变。我不知道是什么部分影响了此行为,但这就像是重置。没有其他答案对我有用,但是这个答案。在这种情况下,我似乎并不是唯一的一个。
阿德里安·贝尔

为我工作,我遇到了以下错误:“无法将项目face EAR的版本更改为1.3。”
Giovanni P.

为我工作!我遇到了错误:“无法将项目构面动态Web模块的版本更改为3.0”
Anup Ghosh,


21

对我有用的是:

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

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

  <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. 在这一阶段,我仍然无法更改Dynamic Web Module;

而不是更改它:

a)取消选中动态Web模块

b)申请

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

在此处输入图片说明

申请并再次检查后:

在此处输入图片说明

希望这可以帮助。


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- > 更新项目


8

您请打开“导航器”视图,然后执行以下步骤

  1. (窗口>显示视图>其他>常规),然后在项目下找到一个.settings文件夹,将其展开,然后打开文件“ org.eclipse.wst.common.project.facet.core.xml”,下面的更改并保存文件。
  2. 将此行中的动态Web模块版本更改为2.5-
  3. 将此行中的Java版本更改为1.5或更高版本。

5
您忘记了告诉您应该在“显示视图”对话框的“常规”文件夹下选择哪种视图。它是“导航器”视图吗?
罗伯托利纳雷斯2014年

6

从项目结构中打开web.xml http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd“ version =” 3.0“> Servlet 3.0 Web应用程序

并更新web.xml文件,例如change version =“ 2.5”

同时从项目.settings文件中更改org.eclipse.wst.common.project.facet.core.xml文件。请按照以下步骤操作:1.窗口>显示视图>其他>常规>导航器

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

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

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

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

该解决方案带有图像插图


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会无效。
Micha 2014年

我已经对pom.xml文件进行了更改,如crunchify.com/…所示。但是,这还不够。我还必须遵循建议,以打开.settings文件夹并编辑文件or.eclipse.wst.common.project.facet.core.xml文件。
二十一点

6

最好,最简单的步骤为我解决了此问题:1)属性 -> 项目构面 ->取消选中/取消选中动态Web模块的复选框->应用2)现在更改为所需的版本应用3)选中动态Web模块复选框..-现在您完成了 -


1
效果很好,但这有什么后果?
sg28 '16

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. 完成!!! ....

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概要文件。现在,一切顺利。


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模块版本中更改servlet版本,或者如先前所写,通过手动编辑org.eclipse.wst.common.project.facet.core来更改。项目的.settings文件夹中的xml。


2

在我的情况下,dtd引用了web.xml。在像悉尼发布的那样将其更改为xsd参考后,它开始起作用。


2

我遇到了同样的问题,删除.settings文件夹可以解决此问题


1

对于无法使我在Eclipse(Mars)中更改项目构面动态Web模块版本的问题,我的解决方案是:

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

1

如果悉尼的回答仍然不能解决问题,请尝试以下操作。遵循悉尼的答案后,转到“属性”>“项目构面”,取消选择“动态Web模块”,然后更改版本以匹配您的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>


1

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

以下是简要执行的步骤。

  1. 设置编译器符合级别。
  2. 更新项目构面
  3. 从首选项更新已安装的JRE
  4. 在pom.xml中添加配置以使用Java 1.7,最后
  5. 从Maven更新项目。

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哪个版本是一个很好的说明。


1

当我尝试将常规Java项目转换为Maven项目时出现此错误

我所做的是确定项目所需的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版本相同的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->更新项目



0

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


0

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

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

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

进入项目属性->项目构面,然后将Dynamic Web Module版本设置为所需的版本。Eclipse现在允许您保存。

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

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

打开新的web.xml并将XML标头和完整的Web应用程序开始标记复制到原始的web.bak,删除新的web.xml并将web.bak重命名为web.xml。

做完了


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


0

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


0

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


0

更新Maven对我有用

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


0

我有相同的症状,但治愈方法不同。我试图将我的JSF 2.2.4 / Spring 3.0 Webapp升级到JSF 2.3,以便在那里享受新的JSF Websocket挂钩,而Eclipse(实际上是STS)将无法配合使用。在Eclipse的Project Facets中,直到我按照先前的答案直接编辑org.eclipse.wst.common.project.facet.core.xml文件之前,JSF 2.3才可用-最高为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,但出现错误。

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

希望这对某人有帮助。Google搜索仅产生了Ali Bassam和间接BalusC的这篇帖子,而此帖子对此有所帮助。


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.