我从其他公司继承了一个Java Web应用程序。我正在尝试将其加载到Eclipse中(通过Import Maven项目),并收到错误消息“无法将项目方面的动态Web模块更改为2.5”。
我一直在探索一下,我发现的一件事是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">
并且pom.xml指定了
的依赖项 <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
但.settings文件夹包含一个带有此
的文件<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<fixed facet="wst.jsdt.web"/>
<installed facet="java" version="1.6"/>
<installed facet="jst.web" version="3.0"/>
<installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
我怀疑这里指定的3.0与其他地方指定的2.5冲突。可能是这种情况吗?这种设置组合有什么办法不会导致错误? (较早版本的Eclipse,例如?)
答案 0 :(得分:100)
简短版
试试这个:
长版
我在学习一些日食动态网络/弹簧的过程中已经多次遇到过这个问题,其他解决方案都没有可靠地修复我的问题或帮助我理解导致问题的原因。我想我开始了。
所以看来当你运行 Maven - &gt;更新项目,m2e(我假设)是将动态Web模块添加到项目构面。添加是关键词。所以当我进入并更新web.xml时 从 [...] http://java.sun.com/xml/ns/javaee/web-app_2_3.xsd&#34;版本=&#34; 2.3&#34;&GT; 至 [...] http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&#34;版本=&#34; 2.5&#34;&GT;
我收到错误&#34;无法将项目方面动态网络模块的版本更改为2.5。&#34;
当我尝试使用3.0时,情况也是如此。
似乎m2e能够将其添加到您的项目中,但是错误说它一旦设置就无法更改它。因此,只需在项目构面页面中取消选择它即可。击中O.K.保存首选项并再次运行Maven Update。
如果您添加了服务器(如tomcat)facet,
答案 1 :(得分:13)
请参阅Cannot change version of project facet Dynamic Web Module to 3.0?
关闭项目,直接更新位于项目.settings文件夹中的文件'org.eclipse.wst.common.project.facet.core.xml'。
答案 2 :(得分:6)
我的猜测是原始作者在初始导入后手动更改了Eclipse项目的Project Facets并且从未运行 Maven |之后更新。
无论如何,对于Maven项目,最好不要将任何Eclipse元数据(即.classpath, .project, .settings/
)提交给SCM,并让m2e在导入时生成它们。
所以我建议复制你的项目结构,从副本中删除所有Eclipse元数据,然后通过m2e导入。
如果导入时仍然存在任何错误,至少可能会提示原作者调整默认值的提示,以便您知道从哪里开始清理。
答案 3 :(得分:3)
打开导航器视图(窗口&gt;显示视图&gt;其他&gt;常规),找到项目下有.settings文件夹,展开它,然后打开文件“org.eclipse.wst.common.project .facet.core.xml“,进行以下更改并保存文件。
将此行中的动态网络模块版本更改为2.5 - <installed facet=”jst.web” version=”2.4″/>
将此行中的JSF版本更改为2.0 - <installed facet=”jst.jsf” version=”1.1″/>
将此行中的Java版本更改为1.5或更高版本 - <installed facet=”java” version=”1.5″/>.
完成此更改后,您可以从项目属性更改Project facet Dynamic Web Module的版本;没有给你这个警告
答案 4 :(得分:2)
在我的情况下,我想将动态构面2.3更改为3.1。
帮助我是may web.xml中的一个数字更改
来自:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app >
<display-name>Archetype Created Web Application</display-name>
</web-app>
TO:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_5.dtd" >
<web-app >
<display-name>Archetype Created Web Application</display-name>
</web-app>
然后转到属性 - &gt;项目方面 - &gt;取消选中动态Web模块 - &GT;行
更新了Maven项目。
答案 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 - &gt;更新项目
答案 6 :(得分:1)
这篇博文对我很有帮助: How to fix Cannot change version of project facet Dynamic Web Module to 3.0 Error in Eclipse
这篇文章解释了如果右键单击&gt;性状&gt;项目方面&gt;将Dynamic Web Module
的版本更改为正确版本无效,请尝试以下操作:
右键单击&gt;性状&gt;资源&GT;转到location
部分中显示的地址。打开org.eclipse.wst.common.project.facet.core
文件,根据需要更改jst.web
版本。刷新项目。它应该工作:))
答案 7 :(得分:0)
请注意,网络应用的当前架构位置为:
xsi:schemaLocation="http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/web-app_3_0.xsd"
答案 8 :(得分:0)
@TheSporkboy几乎是正确的。我今天碰到了这个问题,经过一些摆弄配置后,解决方案如下:
1-将Project Facets中的Dynamic Web Module设置更改为最新3.1
2-从... / web-app_2_5.xsd打开项目的web.xml到... / web-app_3_1.xsd
3-更新Maven项目
答案 9 :(得分:0)
您必须同时更改两个文件!
第一步:关闭月食
第二步:在其中更改构面标签“ jst.web” org.eclipse.wst.common.project.facet.core.xml
最后,在web.xml中更改xsd的版本
对我有用