我在Windows 10上使用Eclipse Oxygen.2(4.7.2)和Java 8.我有一个使用Tomcat在Eclipse内部运行的分面项目。我一直在使用Tomcat 8.5,但是在一个新系统上我升级到了Tomcat 9.当然我在Eclipse中删除了Tomcat 8.5服务器和服务器运行时,并添加了一个Tomcat 9服务器运行时。
在Eclipse中添加Tomcat 9服务器之前,我验证了项目的Project Facets。我看到动态Web模块设置为“3.1”,但现在“4.0”可用。我改为“4.0”,认为这可以让我访问更新的API。
然后我尝试添加Tomcat 9服务器。在此过程中,在“添加和删除”时,它会询问我要为服务器配置要添加的项目。我选择了我的Web项目,但Eclipse说:“Tomcat 9.0版仅支持J2EE 1.2,1.3,1.4和Java EE 5,6,7和8 Web模块”。
据我所知,这正是我正在使用的。但我唯一改变的是动态网络模块。所以我回到我的项目配置并尝试将“动态Web模块”更改回“3.1”。 Eclipse告诉我:
无法将项目方面动态Web模块的版本更改为3.1。
嗯...所以我会把它删除。我取消选中“Dynamic Web Module”旁边的框,Eclipse告诉我:
无法卸载Dynamic Web Module 4.0。
那是一个很好的水壶。我无法将项目部署到Tomcat,显然是因为动态Web模块。我无法将动态Web模块更改回原来的状态。我该怎么办?问题出在哪里?
我打开Eclipse Bug 530844,看看我是否能得到这种行为的原因。
我在与你相同的环境中重现了这个问题。当我试图从4.0回退到3.1时,我收到以下错误:
This blog provided the solution(这有点像黑客,但它有效):
另见这个问题:Dynamic Web Module 3.0 -- 3.1
一些相关问题:
我的解决方案是对此消息的回复:
Dynamic Web Module 4.0 cannot be uninstalled.
1 - 所以;如果您无法卸载动态Web模块(我重复:“卸载”而不是“更改其版本”),您可以先在项目目录中编辑文件:.settings/org.eclipse.wst.common.project.facet.core.xml
并通过删除此行手动卸载它:
<installed facet="jst.web" version="4.0"/>
2 - 在此之后,如果你想使用动态网络模块4.0,请确保你至少在你的方面使用java 1.8内部相同的文件.settings/org.eclipse.wst.common.project.facet.core.xml
<installed facet="java" version="1.8"/>
或者您也可以在“项目构面配置”面板中更改它
3 - 如果问题仍然存在,请查看你的pom文件并验证没有强制java版本为1.7,你应该有这些属性
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
如果您更改了pom文件,请记住更新项目:Maven>更新项目
4 - 最后,如果您仍然无法使用Dynamic Web Module 4.0,请在删除WEB-INF\web.xml
文件之间进行选择,该文件可以配置另一个动态Web版本,如下所示:
<?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"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
...
否则,您可以手动更改支持的版本:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
...
返回Project Facets配置面板,再次尝试选择Dynamic Web Module 4.0,它应该可以工作
希望这有帮助。
对我来说,从我的pom文件中删除此依赖项后,此问题消失了。在我的情况下,我不需要这种依赖,因为我没有使用servlet
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
希望有所帮助