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

问题描述 投票:7回答:3

我在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,看看我是否能得到这种行为的原因。

java eclipse tomcat java-ee tomcat9
3个回答
7
投票

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

CannotDowngradeTo31

This blog provided the solution(这有点像黑客,但它有效):

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

另见这个问题:Dynamic Web Module 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项目,我必须使用add this dependency to the POM for Servlet 4。
  • 即使将动态Web模块版本更改为3.1后,我的Web应用程序仍继续使用4.0版本,因此我不确定该方面的实现方式。

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,它应该可以工作

希望这有帮助。


0
投票

对我来说,从我的pom文件中删除此依赖项后,此问题消失了。在我的情况下,我不需要这种依赖,因为我没有使用servlet

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

希望有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.