我正在使用maven在Eclipse中创建一个动态web应用程序。我添加了一些文件夹,如src/test/java和src/test/resources。我还更改了Java Build Path中的库,以获得JavaSE-1.7。到这里都没问题。
当我试图改变项目Facet动态Web模块时,出了问题。在同一个地方,我将Java更改为1.7。它仍然告诉我,不能将项目facet动态Web模块的版本更改为3.0。
我已经改变了所有我认为会影响改变的东西。
我正在使用maven在Eclipse中创建一个动态web应用程序。我添加了一些文件夹,如src/test/java和src/test/resources。我还更改了Java Build Path中的库,以获得JavaSE-1.7。到这里都没问题。
当我试图改变项目Facet动态Web模块时,出了问题。在同一个地方,我将Java更改为1.7。它仍然告诉我,不能将项目facet动态Web模块的版本更改为3.0。
我已经改变了所有我认为会影响改变的东西。
我更新了我的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 ->更新项目…
另一种方法是编辑项目facet配置文件本身
将这一行中的动态web模块版本更改为3.0 - <installed facet="jst. xml "。网络”version = " 2.5 " / >
然后:
右键单击项目(在project Explorer面板中)。 选择Maven»更新项目(或按Alt+F5)
您将在Eclipse项目的.settings目录中找到该文件。
请打开Navigator视图并执行以下步骤
(Window > Show View > Other > General),然后发现在你的项目下有一个。settings文件夹,展开它,然后打开文件“org.eclipse.wst.common.project.facet.core.xml”,做下面的修改并保存文件。 将这一行中的动态web模块版本更改为2.5 - 将这一行中的Java版本更改为1.5或更高版本。
我想我也有和你一样的问题。我的Web .xml有2.5版本,而项目有(右键单击项目->属性->项目facet ->)动态Web模块2.3。
尽管我试图将版本从2.3更改为2.5,但ECLIPSE不允许。 解决方案:我删除了标题下的复选标记动态Web模块,我保存,我有更新项目。自动重新唤醒是用正确的版本进入框。我用的是Eclipse Kepler。
附注:看看乔纳森下面的评论,非常有用。
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配置文件。现在一切都很顺利。
从项目结构中打开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"
还要从project .settings文件更改org.eclipse.wst.common.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
解决方案是由图像插图产生的
进行maven更新或重新导入项目并没有帮助。@Sydney的答案是正确的;此外,我必须在不同的工作空间中重新创建项目,因为JavaServer Faces 2.2需要动态Web模块2.5或更新版本
我也遇到了同样的问题,编辑web.xml以及更改.settings文件夹中的文件并没有帮助。我的解决方案是直接指向maven编译器插件,通过编辑pom.xml使用所需的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->更新项目,然后您可以在属性->项目facet ->动态Web模块版本中更改servlet版本,或者如前面所写的,通过手动编辑项目的。settings文件夹中的org.eclipse.wst.common.project.facet.core.xml。
右键单击项目→属性;在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 ->更新项目。
打开org.eclipse.wst.common.project.facet.core.xml文件并更改jst. core.xml文件。Web版本到3.0。还要将web.xml更新到3.0版本。保存并更新项目。希望这能有所帮助。我正在使用Eclipse Juno
对于不允许我在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。
完成了。
我的Web模块3.0在Web .xml,但在属性>动态Web模块它是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">
在此更改后,做:右键单击项目>Maven>更新项目…
如果悉尼的回答仍然没有帮助,那么试试下面的答案。 按照悉尼的答案,去属性>项目facet取消选择动态Web模块,然后改变版本以匹配您的网页。配置,然后再次选择。应用>保存 然后是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>
我尝试了这里的许多答案,但没有一个对我有用。 然后我在这里找到了一篇关于我的问题的文章。我也想在这里分享。
下面是简单的步骤。
设置编译器遵从级别。 更新项目面 从首选项更新已安装的JRE 在pom.xml中添加配置以使用java 1.7,最后 从Maven更新项目。
最好的和简单的步骤为我解决这个问题 1)属性->项目facet ->取消选中/取消标记动态Web模块->应用的复选框 2)现在更改到所需的版本Apply 3)选中“动态web模块”复选框。 ——现在你完成了——
对于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
maven中仍然有一个错误标记:
cannot change version of project facet dynamic web module to 3.0 one or more constrants have not been satisfied
然后你可以: 取消选中动态web模块,并重新检查它。 我认为这是因为.settings的eclipse文件损坏了。关于第二个提示tomcat哪个版本是一个很好的说明。
他们是解决这个问题的另一种方法(看看它,希望它能帮助你解决你的问题)
问题
不能将项目facet动态web模块2.3版本更改为3.0版本
解决方案
转到项目位置(例如:- d:/maven/todo) 进入。setting文件夹 检查这个文件:org.eclipse.wst.common.project 打开文件并更改“jst.”属性从2.3到3.0,并保存 右键单击项目刷新项目并更新maven 完成了! !
对我有用的是:
将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。如果没有,单击编辑并选择它应该是什么。
修改web.xml,以便在版本和链接中引用3.0
确保在Project Facets中将Java设置为1.8
在这个阶段,我仍然不能改变动态Web模块;
而不是改变它:
a)取消勾选动态Web模块
b)应用
C)再检查一遍。新版本3.0应该设置。**
应用并再次检查后:
希望这能有所帮助。
Click on your project folder. Go to Window > Show View > Navigator Go to Navigator and expand the .settings folder Open org.eclipse.wst.common.project.facet.core.xml file <?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> Change the version like this <installed facet="jst.web" version="3.1"/> Save Just update your project. Right Click on The Project Folder > Maven > Update Project > Select the Project and click 'Ok'
这招对我很管用。
我用正确的版本修改了web.xml,xsd位置,用正确的版本修改了org.eclipse.wst.common.project.facet.core.xml,并进行了maven更新,解决了这个问题。
我有同样的症状,但治疗方法不同。我试图将我的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间接提供的这篇文章。
我遇到了同样的问题——我只是从我的工作空间中删除了项目,然后清理了“eclipse文件/文件夹,例如:.project, .settings,等等),然后再次导入maven项目,它工作了。
当我试图将一个普通的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版本。
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 ->更新项目
只是想分享我自己的经验,我发现我的动态Web模块被锁定了,它是通过以下步骤解决的:
第一个
右键单击项目>属性>项目facet >右键单击动态Web模块>解锁>应用并关闭
第二个
右键单击项目> Maven >更新项目> OK