Java Eclipse不可逆动态Web模块4.0选择;Tomcat 9没有';我不支持

Java Eclipse不可逆动态Web模块4.0选择;Tomcat 9没有';我不支持,java,eclipse,tomcat,jakarta-ee,tomcat9,Java,Eclipse,Tomcat,Jakarta Ee,Tomcat9,我在Windows10和Java8上使用EclipseOxygen.2(4.7.2)。我在Eclipse中使用Tomcat运行了一个刻面项目。我一直在使用Tomcat8.5,但在一个新系统上我升级到了Tomcat9。当然,我在Eclipse中删除了Tomcat8.5服务器和服务器运行时,并添加了一个Tomcat9服务器运行时 在Eclipse中添加Tomcat9服务器之前,我验证了项目的各个方面。我看到动态Web模块设置为“3.1”,但现在“4.0”可用。我改为“4.0”,认为这将使我能够访问更

我在Windows10和Java8上使用EclipseOxygen.2(4.7.2)。我在Eclipse中使用Tomcat运行了一个刻面项目。我一直在使用Tomcat8.5,但在一个新系统上我升级到了Tomcat9。当然,我在Eclipse中删除了Tomcat8.5服务器和服务器运行时,并添加了一个Tomcat9服务器运行时

在Eclipse中添加Tomcat9服务器之前,我验证了项目的各个方面。我看到动态Web模块设置为“3.1”,但现在“4.0”可用。我改为“4.0”,认为这将使我能够访问更新的API

然后我尝试添加Tomcat9服务器。在此过程中,在“添加和删除”处,它会询问我要为服务器配置哪些要添加的项目。我选择了我的web项目,但Eclipse说:“Tomcat版本9.0只支持J2EE1.2、1.3、1.4和JavaEE5、6、7和8 web模块”

据我所知,这正是我所用的。但我唯一改变的是动态Web模块。因此,我回到我的项目配置,并试图将“动态Web模块”更改回“3.1”。Eclipse告诉我:

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

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

无法卸载动态Web模块4.0

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


我打开了电脑,想看看是否能找到这种行为的原因。

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

(这有点像黑客,但很管用):

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


几个相关问题:

  • 看起来您的设置可能不太正确,出现了错误“Tomcat 9.0版仅支持J2EE1.2、1.3、1.4和JavaEE5、6、7和8 Web模块”。您的项目是否配置为使用Servlet 4.0?对于我的Maven项目,我必须为Servlet 4提供支持

  • 即使在将动态Web模块版本更改为3.1之后,我的Web应用程序仍继续使用4.0版本,因此我不确定这方面实现了什么


我的解决方案是对以下消息的响应:

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"/>
或者,您也可以在“ProjectFacets配置”面板中进行更改

3-如果问题仍然存在,请查看您的pom文件,并验证没有强制java版本为1.7,您应该具有这些属性

    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
否则,您可以手动更改支持的版本:

<?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文件中删除下面的依赖项后,这个问题就消失了

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

javax.servlet
javax.servlet-api
4.0.0
假如

希望这有帮助

我将javax.servlet-api降级为3.1.0

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

javax.servlet
javax.servlet-api
3.1.0
假如
然后根据@Skomisa的上述评论进行编辑

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


注意-更新maven项目并检查以反映更改。

通常,解锁、更改版本和重新锁定都会起作用-但这最终会起作用,因为“当然,我在Eclipse中删除了Tomcat 8.5服务器和服务器运行时”…为什么需要这样做?这两个Tomcat服务器都可以存在于Eclipse中(假设您已将它们安装到不同的目录)。@skomisa这是一个新的系统安装,我甚至没有费心安装Tomcat 8.5,这就是我从Eclipse中删除该服务器和运行时的原因。(我将现有项目转移到新机器上。)@GarretWilson好的,明白了。我的项目没有专门配置servlet版本。它使用
javax.ws.rsapi:2.0.1
resteasyjaxrs:3.1.0.Final
。这对Tomcat 9不起作用吗?为什么我必须为Servlet 4添加依赖项?为什么我的项目需要使用Servlet 4?不,您的应用程序不需要Servlet 4的依赖项,但是通过将Dynamic Web Module设置为4.0,您没有告诉Eclipse您的项目正在使用Servlet 4.0吗?(我想我没有领会你的意思。)不管怎样,你的问题的答案是在core.xml中更正该版本。要清楚,我没有得到你看到的错误“Tomcat 9.0版仅支持…”,我想知道这是否是因为我将Dynamic web Module更改为4.0的web应用程序确实使用Servlet 4.0,而你的不是——仅此而已。”…通过将动态Web模块设置为4.0,你不是在告诉Eclipse你的项目正在使用Servlet 4.0吗?“不,通过将动态Web模块设置为4.0,我是在告诉Eclipse我想要使用动态Web模块4.0。我假设它比动态Web模块3.1更好,支持更高版本的servlet API但不需要它们,就像我假设Tomcat 9比Tomcat 8更好,支持更高版本的servlet API但不需要它们一样。也许我的假设是错误的。你的解决方案
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>