Eclipse不可逆动态Web模块4.0选择; Tomcat 9不支持它

我在Windows 10和Java 8上使用Eclipse Oxygen.2(4.7.2)。我有一个使用Tomcat在Eclipse内部运行的分面项目。 我一直在使用Tomcat 8.5,但在新系统上我升级到Tomcat 9.当然,我在Eclipse中删除了Tomcat 8.5服务器和服务器运行时,并添加了Tomcat 9服务器运行时。

在Eclipse中添加Tomcat 9服务器之前,我validation了项目的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告诉我:

无法将项目facet动态Web模块的版本更改为3.1。

嗯…所以我会把它删除。 我取消选中“Dynamic Web Module”旁边的框,Eclipse告诉我:

无法卸载Dynamic Web Module 4.0。

那是一个很好的水壶。 我无法将项目部署到Tomcat,显然是因为动态Web模块。 我无法将动态Web模块更改回原来的状态。 我该怎么办? 问题出在哪里?

我打开了Eclipse Bug 530844 ,看看我是否能找到这种行为的原因。

我在与你相同的环境中重现了这个问题。 当我试图从4.0回退到3.1时,我收到以下错误:

CannotDowngradeTo31

这个博客提供了解决方案 (这有点像黑客,但它的工作原理):

  • 编辑项目的.settings目录中的文件org.eclipse.wst.common.project.facet.core.xml
  • 对于包含facet =“jst.web”version =“4.0”的行 ,将版本更改为3.1

另请参阅此SO问题: 动态Web模块3.0 – 3.1


一些相关问题:

  • 看起来其他东西可能不太适合您的设置获得该错误“Tomcat版本9.0仅支持J2EE 1.2,1.3,1.4和Java EE 5,6,7和8 Web模块”。 您的项目是否配置为使用Servlet 4.0? 对于我的Maven项目,我不得不将此依赖项添加到 Servlet 4 的POM中。

  • 即使将动态Web模块版本更改为3.1后,我的Web应用程序继续使用4.0版本,因此我不确定该方面的实现方式。