我正在使用maven在Eclipse中创建动态Web应用程序。我添加了一些文件夹,例如src/test/java
和src/test/resources
。我还更改了Java Build Path中的库以获取JavaSE-1.7。这一切都可以了。
当我尝试更改Projects Facet动态Web模块时出现问题。我在同一个地方将Java更改为1.7。它还告诉我,无法将项目方面的动态Web模块版本更改为3.0。
我已经改变了所有会影响我想到的改变的事情。
答案 0 :(得分:559)
另一种方法是编辑项目构面配置文件本身:org.eclipse.wst.common.project.facet.core.xml
将此行中的动态网络模块版本更改为3.0 - <installed facet="jst.web" version="2.5"/>
然后:
您将在Eclipse项目的.settings
目录中找到此文件。
答案 1 :(得分:301)
我更新了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 - &gt;更新项目......
答案 2 :(得分:162)
我想我和你有同样的问题。我的web.xml版本为2.5,而项目有(右键单击Project-&gt; Properties-&gt; Project Facets-&gt;)动态Web模块2.3。
虽然我试图将版本从2.3更改为2.5但ECLIPSE不允许这样做。 解决方案:我删除了动态Web模块标题下的复选标记,我已保存并且我有更新项目。自动重新唤醒正在进入具有正确版本的框。我使用Eclipse Kepler。
p.s。:看看下面的comments of Jonathan,非常有用。
答案 3 :(得分:42)
打开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"/>
这对我有用。
答案 4 :(得分:41)
我遇到了同样的问题,我甚至试图删除该项目并再次添加。诀窍是删除.settings
目录。
答案 5 :(得分:23)
删除
.settings
.classpatch
.projejct
target
再次导入maven项目。
答案 6 :(得分:20)
对我有用的是什么:
答案 7 :(得分:8)
请打开导航器视图并执行以下步骤
答案 8 :(得分:6)
从项目结构中打开web.xml http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd” 版本= “3.0” &GT; Servlet 3.0 Web应用程序
并更新web.xml文件 例如,更改版本=“2.5”
还要从项目.settings文件中更改org.eclipse.wst.common.project.facet.core.xml文件 按照步骤 1.窗口&gt;显示视图&gt;其他&gt;一般&gt;导航
项目目录下有.settings文件夹
将此行中的动态Web模块版本更改为2.5 4.将此行中的Java版本更改为1.5或更高
现在刷新您的项目并设置为在您的服务器上运行。
请按照博客了解解决方案 http://scrapillars.blogspot.in/2014/02/how-to-change-project-facet-in-eclipse.html
使用图像插图生成解决方案
答案 9 :(得分:6)
最好和简单的步骤为我解决了这个问题 1)属性 - &gt; 项目方面 - &gt;取消选中<取消选中动态网络模块的复选框 - &gt;应用 2)现在更改为所需的版本应用 3)选中动态网络模块复选框。 - 现在已完成 -
答案 10 :(得分:4)
他们是解决此问题的另一种方法(检查出来希望它能帮助您解决问题)
<强>问题强>
无法将项目构面动态Web模块2.3版本更改为3.0
解决方案
答案 11 :(得分:3)
我遇到了同样的问题,编辑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-&gt;更新项目,之后您可以在properties-&gt; project facets-&gt;动态Web模块版本中更改servlet版本,或者如前所述,通过手动编辑org.eclipse.wst.common来更改。项目的.settings文件夹中的project.facet.core.xml。
答案 12 :(得分:2)
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配置文件。现在情况很好。
答案 13 :(得分:2)
在我的情况下,web.xml被dtd引用。之后我将其更改为xsd引用,就像悉尼发布的那样,它有效。
答案 14 :(得分:2)
我遇到了同样的问题,删除.settings文件夹解决了问题
答案 15 :(得分:1)
我无法在Eclipse(Mars)中更改项目构面动态Web模块版本的问题的解决方案是:
答案 16 :(得分:1)
对于maven eclipse web项目,更改动态Web模块版本需要检查三个位置。如果使用eclipse,并且在检查了以下内容之后: 1)web.xml
staload
UNSAFE =
"prelude/SATS/unsafe.sats"
fun
loop(p0: ptr): void = let
val c = $UNSAFE.ptr_get<char>p0)
in
if isneqz(c) then (do_something(c); loop(ptr_succ<char>(p0)) else ()
end
val () = loop(string2ptr(str))
2)maven:
<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">
3)eclipse构建路径和编译器版本是1.7
你在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>
然后你可以: 取消选中动态Web模块,然后重新检查它。 我认为这是因为eclipse文件的设置在某种程度上被破坏了。关于第二个提示tomcat which version是一个很好的说明。
答案 17 :(得分:1)
如果悉尼的回答仍无效,请尝试以下方法。 按照悉尼的回答,转到属性&gt; Projects Facets取消选择Dynamic Web Module,然后更改版本以匹配您的web.config,然后再次选择。申请&gt;保存 然后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>
答案 18 :(得分:1)
我在这里尝试了很多答案,但没有一个能为我工作。 然后我找到了一篇关于我的问题here的文章。我想在这里分享它。
以下是简要介绍的步骤。
答案 19 :(得分:0)
只想分享我自己的经验,我发现我的动态Web模块已锁定,可以通过以下步骤解决:
第一
第二
答案 20 :(得分:0)
更新maven 为我工作
选择项目,然后按 ALT + F5 ,然后选择项目单击“确定”
答案 21 :(得分: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中,我经常收到一个可怕的警告:“当一个或多个已安装的facet的实现不可用时修改分面项目可能会导致项目损坏。你确定要继续吗?”这促使我做更频繁的提交,但没有发生腐败。
更新以下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 - &gt;动态Web模块从2.5到3.0。我试过3.1但是有错误。
在这个过程中,我经常在这篇文章的标题中得到错误,“无法将项目方面的动态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仍然警告说“无法找到项目方面版本2.3的实现jst.jsf。功能将受到限制。”我怀疑这只是意味着自动完成和其他Eclipse便利将无法使用,因为它找不到我的POM中声明的JSF 2.3实现。
希望这有助于某人。谷歌搜索只得到了Ali Bassam的this post和间接帮助BalusC的人。
答案 22 :(得分:0)
我遇到了同样的问题-我只是从工作区中删除了项目,然后清理了“ eclipse文件/文件夹,例如:.project,.settings等),然后再次导入了maven项目,它可以正常工作。< / p>
答案 23 :(得分:0)
当我尝试将常规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->更新项目
答案 24 :(得分:0)
我通过修改web.xml 解决了问题,包括正确的版本,xsd位置和修改org.eclipse.wst.common.project.facet.core.xml 正确版本并执行 maven更新。
答案 25 :(得分:0)
我的Web Module 3.0
已web.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...
答案 26 :(得分:0)
此问题版本右键单击项目 - &gt; properties-&gt; Project Facets-&gt;右键单击Dynamic Web Module-&gt;解锁它 - &gt; uncheck-&gt;选择2.5版本 - &gt; Apply-&gt;更新maven
答案 27 :(得分:0)
这是pagurix答案的变体,但是使用了Eclipse Mars。
将您的web.xml文件更改为web.bak
忽略错误,我们接下来会重新生成错误。
进入项目属性 - &gt;项目方面并将Dynamic Web Module版本设置为您需要的版本。 Eclipse现在允许您保存。
现在右键单击该项目。选择Java EE工具 - &gt;生成部署描述符存根。
这将创建一个包含所需版本的新web.xml。
打开新的web.xml并将XML标题和完整的web-app开始标记复制到原始web.bak,删除新的web.xml并将web.bak重命名为web.xml。
完成。
答案 28 :(得分:0)
打开org.eclipse.wst.common.project.facet.core.xml文件并将jst.web版本更改为3.0。还要将web.xml更新到3.0版。保存并更新项目。希望这可以帮助。我正在使用Eclipse Juno
答案 29 :(得分:0)
执行maven更新或重新导入项目没有帮助。 @悉尼的答案是对的;此外,我必须在JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer
中所述的不同工作区中重新创建项目