14

我在带有 Java 8 的 Windows 10 上使用 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 模块。所以我回到我的项目配置并尝试将“Dynamic Web Module”改回“3.1”。日食告诉我:

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

嗯...所以我将其删除。我取消选中“动态 Web 模块”旁边的框,Eclipse 告诉我:

无法卸载 Dynamic Web Module 4.0。

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

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

4

4 回答 4

12

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

无法降级到 31

该博客提供了解决方案(这有点骇人听闻,但确实有效):

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

另请参阅此 SO 问题: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 项目,我必须将此依赖项添加到Servlet 4 的 POM 中。

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

于 2018-02-07T06:49:00.403 回答
3

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

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

希望有帮助

于 2019-04-12T10:58:07.363 回答
2

我的解决方案是对此消息的回复:

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 - 在此之后,如果您想使用动态 web 模块 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,它应该可以工作

希望这有帮助。

于 2019-04-08T00:25:08.470 回答
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>

然后根据@Skomisa 的上述评论进行编辑;

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

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

于 2021-05-27T12:16:30.567 回答