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

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

我已经更改了所有可能影响更改的内容。

评论

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

这对我有用:stackoverflow.com/questions/19661135/dynamic-web-module-3-0-3-1

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

这是蚀的错误吗?

无法将项目构面动态Web模块的版本更改为2.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>Servlet 3.0 Web Application</display-name>
</web-app>


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

评论


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

– jplandrain
2014年4月17日11:50



这是3.1 web.xml文件的有效头文件<?xml version =“ 1.0” encoding =“ UTF-8”?>

–雅各布·亚历山大·埃希勒(Jakob Alexander Eichler)
16年5月6日在16:22



没有web.xml的项目呢? :)

– Anand Rockzz
16年12月13日在6:01

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

–tequilacat
17 Mar 25 '17在9:01

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

–拉基
18年3月16日在3:52

#2 楼

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

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

然后:


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

Eclipse项目中.settings目录中的文件。

评论


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

– EdgarZeng
2013年9月8日上午11:39

当您的项目中没有web.xml时,这似乎是解决此问题的唯一方法。

–肖恩·舍伍德(Shawn Sherwood)
13-10-14在16:32

我已经在web.xml中安装了3.0,并且STS仍然无法更新,而mvn更新也无济于事。但是,此方法有效。

– MiB
2014年3月18日在16:52

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

–虚拟
15年8月17日在11:59

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

–鲁西·沙(Rushi Shah)
16年8月2日在18:26

#3 楼

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

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

p.s .:看看下面乔纳森的评论,非常有用。

评论


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

– Suresh
2014年6月6日15:36

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

–乔纳森
2014年4月24日在6:38

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

–绞肉
2015年10月5日在20:29

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

– Aksappy
2015年12月16日下午5:34

在我的情况下,这可行,为什么在Web模块pom中为Dnamic Web模块设置了另一个版本,所以这与项目配置冲突

– ocrampico
18年5月5日在7:07

#4 楼


单击项目文件夹。
转到窗口>显示视图>导航器
转到导航器并展开.settings文件夹

打开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>


像这样更改版本<installed facet="jst.web" version="3.1"/>
保存
仅更新项目。右键单击“项目”文件夹> Maven>更新项目>选择项目,然后单击“确定”。

这对我来说就行了。

#5 楼

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

评论


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

–bcody
2014年4月6日13:12

为什么删除.setting后它能正常工作,请问您愿意吗?

–阿比吉特·查克拉(Abhijit Chakra)
16年5月26日在10:34

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

– Adrian Ber
16年5月27日在9:19

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

–乔凡尼·P。
16-11-23在10:14



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

– Anup Ghosh
18年1月9日在22:30

#6 楼

删除

.settings 
.classpatch 
.projejct 
target


,然后再次导入maven项目。

评论


如何再次导入Maven项目。我是新来的。

–丹尼尔·布鲁尔(Daniel Brower)
19年4月4日在17:56

#7 楼

适用于我的方法:



将Java更改为1.8(或1.7)

在POM中-您必须将编译器插件设置为version <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。如果不是,请单击“编辑”,然后选择它应该是什么。 br />



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





在这一阶段,我仍然无法更改Dynamic Web Module;

而不是更改它:

a)取消选中动态Web模块

b)应用

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



应用并再次检查后:



希望这会有所帮助。

#8 楼

右键单击项目→属性;在Project Facets中,取消选择“动态Web模块”(版本应为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->更新项目。

#9 楼

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


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


评论


您忘了告诉您应该在“显示视图”对话框的“常规”文件夹下选择哪种视图。是“导航器”视图吗?

– Roberto Linares
2014-02-18 23:25

#10 楼

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


并更新web.xml文件
,例如,更改版本=“ 2.5”

也更改org.eclipse.wst.common。项目.settings文件中的project.facet.core.xml文件
遵循步骤
1.窗口>显示视图>其他>常规>导航器


那里是项目目录下的.settings文件夹。
将此行中的动态Web模块版本更改为2.5
4。将此行中的Java版本更改为1.5或更高版本

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

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

该解决方案带有图像插图

评论


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

– Micha
14年2月24日在6:54

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

– 21点
2015年1月20日在9:55



#11 楼

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

评论


运作良好,但这会带来什么后果?

– sg28
16-11-14在1:45



#12 楼

他们是解决此问题的另一种方法(检查出希望对您有帮助的问题)。

问题

无法更改项目构面动态Web模块2.3的版本到3.0

解决方案


转到项目位置(例如-D:/ maven / todo)
转到.setting文件夹
/>检查该文件:org.eclipse.wst.common.project.facet.core.xml
打开文件,将“ jst.web”属性从2.3更改为3.0,然后保存
右键单击在项目上刷新项目并更新Maven
完成!!! .....


#13 楼

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

就我而言,我在Maven项目中使用注释配置,但没有web.xml文件。事实证明,在没有web.xml的情况下,WTP会查看您的Maven依赖项以确定要使用的Servlet版本。就我而言,我已经定义了以下内容:将其更改为6.0可以解决此问题,现在它使用的是Servlet 3.0而不是3.1,这是JavaEE的默认设置7.由于必须从Tomcat 8转到Tomcat 7,因此Tomcat 7仅支持JavaEE 6 Web概要文件。现在事情进展顺利。

#14 楼

我遇到了同样的问题,仅编辑web.xml以及更改.settings文件夹中的文件都无济于事。我的解决方案是通过编辑pom.xml直接指向maven编译器插件以使用所需的Java版本:更改属性->项目构面->动态Web模块版本中的servlet版本,或者如前所述,通过在项目的.settings文件夹中手动编辑org.eclipse.wst.common.project.facet.core.xml进行更改。

#15 楼

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

#16 楼

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

#17 楼

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


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


#18 楼

如果悉尼的回答仍然不能解决问题,请尝试以下操作。
按照悉尼的回答,转到“属性”>“项目构面”,取消选择“动态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>




#19 楼

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

下面是简要介绍的步骤。


设置编译器合规性级别。 />从首选项更新已安装的JRE
在pom.xml中添加配置以使用Java 1.7,最后从Maven更新项目。


#20 楼

对于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)maven:

<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

然后您可以:
取消选中动态Web模块,然后重新对其进行检查。
我认为这是因为eclipse文件的.settings有所损坏。关于第二个提示tomcat,哪个版本是一个很好的注释。

#21 楼

当我尝试将一般的Java项目转换为Maven项目时,出现此错误。

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

通过将版本降低到低于1.8,我的IDE将开始抱怨它无法识别大量导入的库,因此,我确定了我的最低Java版本现在,请确保Java编译器版本使用与Project Facets中设置的Java版本相同的版本。

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




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

#22 楼

进行maven更新或重新导入项目无济于事。 @悉尼的答案是正确的;此外,我还必须按照JavaServer Faces 2.2中要求Dynamic Web Module 2.5或更高版本的方式在不同的工作空间中重新创建项目。

#23 楼

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

#24 楼

这是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。

完成。

#25 楼

我的名字在Web Module 3.0中是web.xml,但在properties>Dynamic Web Module中是3.1

我将web.xml更改为: :right click on project>Maven>Update Project...

#26 楼

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

#27 楼

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

#28 楼

更新maven对我有用

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

#29 楼

我有相同的症状,但治愈方法不同。我试图将我的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。 br />这是我跳过的篮球。我不知道所有这些都是必需的,因为我从根本上不了解所有这些配置。

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


在POM,Eclipse编译器和Eclipse Project Facets中将JDK从1.7升级到1.8。

更新以下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>


... to:

    <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模块从2.5到3.0。我试过3.1,但出现错误。

在此过程中,我经常在帖子标题中看到错误:“无法将Project Facet动态Web模块的版本更改为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实现。

希望这对某人有帮助。谷歌搜索仅产生了阿里·巴萨姆(Ali Bassam)和间接帮助了BalusC的这篇文章。

#30 楼

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