当前位置: 首页 > 知识库问答 >
问题:

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

方英耀
2023-03-14

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

共有3个答案

卢文博
2023-03-14

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

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,确保你至少在你的facets java 1.8里面使用相同的文件< code >。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-最后,如果您仍然不能使用动态Web模块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">
...

返回到ProjectFacets配置面板,再次尝试选择DynamicWebModule 4.0,它应该可以工作

希望这有帮助。

南宫嘉
2023-03-14

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

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

希望有所帮助

庾和昶
2023-03-14

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

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

  • 编辑文件 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版本,所以我不确定这个方面实现了什么。

  •  类似资料:
    • 问题内容: 我的问题是,即使将“ Deployment Assembly”设置为包括maven依赖项,这也导致找不到我的类,我也不知道该怎么办。 我只是注意到该类,因为其他类似乎已包含在我的软件包中。 我的文件pom.xml 我的文件web.xml 问题答案: 出现此问题的原因可能是: 某些库版本不匹配(例如,要编译的Java版本!= Web应用程序服务器上的Java版本)。 部署期间不包括必需的

    • 我想把.html文件和.java文件放在同一个包中,放在/src/main/java下,但是在创建新的.html文件时,Eclipse提供/webapp作为默认文件夹。有没有办法改变这种行为?

    • 我用的是IntelliJ IDEA Pro 13.1.2。从未使用过13以下的任何版本。 当试图从IDE运行时,我得到以下消息:

    • 写了一个组件,h5、模拟器能正常显示,但是打包成Android包安装到手机上会导致整个页面都白屏了,没法正常显示,已经定位到就是该组件的问题,把组件改写去掉动态插槽打包后就没问题,但是代价就是组件通用性不高,可能需要根据业务定制不同的组件(绝大部分代码差不多),请问有没有啥办法处理这问题? tags 如下: 使用方式: 更新后的使用方式: 组件: 使用: 仍然不行,显示的始终是组件里面的默认插槽内

    • 我正在使用Android studio 1.0。1.我的项目中有一个被其他模块引用的java模块。我已经从SVN那里查过了,但现在每天 检测到不支持的模块:以下模块不支持编译:。不幸的是,在一个项目中不能有非Gradle Java模块和Android Gradle模块。 在收到此错误后,请停止编译此模块,以便我无法再编译/运行我的项目。