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

2022-09-04 02:35:21

我在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服务器之前,我验证了我的项目的项目方面。我看到动态 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模块。因此,我返回到我的项目配置,并尝试将“动态 Web 模块”更改回“3.1”。Eclipse告诉我:

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

嗯......所以我就把它拿掉。我取消选中了“动态Web模块”旁边的框,Eclipse告诉我:

无法卸载动态 Web 模块 4.0。

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

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


答案 1

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

CannotDowngradeTo31

这个博客提供了解决方案(这有点黑客,但它有效):

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

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


几个相关问题:

  • 看起来您的设置中的其他内容可能不太正确,因为收到错误“Tomcat V9.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,因此我不确定该方面实现了什么效果。


答案 2

对我来说,从我的pom文件中删除下面的依赖项后,这个问题消失了。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>

希望有所帮助


推荐