动态 Web 模块 3.0 -- 3.1
Posted
技术标签:
【中文标题】动态 Web 模块 3.0 -- 3.1【英文标题】:Dynamic Web Module 3.0 -- 3.1 【发布时间】:2013-11-08 18:43:16 【问题描述】:我有一个基于代码的 mavenized 配置 Spring 3.2.4 Web 应用程序。 当我首先使用 Maven/pom.xml 构建应用程序时,出现 web.xml 丢失的错误。 首先我尝试创建一个空的 web.xml。这是项目方面发生变化的时刻(我不知道为什么)。它从动态 Web 模块 3.0 切换到 3.1,这是不可逆转的。 我怎样才能再次将其更改为 Dynamic Web Modules 3.0 ???
此外,我无法删除 JAX-RS。尝试这样做会导致:
Failed while uninstalling JAX-RS (REST Web Services) 1.0.
org.eclipse.jst.javaee.web.internal.impl.WebAppImpl cannot be cast to org.eclipse.jst.j2ee.webapplication.WebApp
后来发现可以通过在pom.xml中插入相应的插件来避免Maven编译错误:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
【问题讨论】:
【参考方案1】:我在 eclipse 中遇到了类似的问题,唯一能解决的方法就是
移除网络模块 申请 更改模块版本 添加模块 配置(对话框底部的更多配置链接) 申请只需确保在应用之前配置 web 模块,因为默认情况下它将在 /WebContent/ 中查找您的 web 文件,这不是 Maven 项目结构应该是的。
编辑:
这是第二种方法,以防万一
退出 Eclipse,进入文件系统中的项目,然后进入 .settings 文件夹。 打开org.eclipse.wst.common.project.facet.core.xml
,制作备份,并删除网络模块条目。
您也可以在那里修改 Web 模块版本,但同样不能保证。
【讨论】:
您的意思是删除项目构面中的动态 Web 模块吗?我不允许这样做。 Eclipse 说不能删除。 @user233552 好吧,那么你必须努力做到这一点......退出eclipse,转到文件系统中的项目,然后转到.settings forlder。打开 org.eclipse.wst.common.project.facet.core.xml 并删除 Web 模块条目。进行文件备份,因为它可能会破坏事情。您也可以在那里修改版本,但我不确定它是否可以工作...... +1 表示第二种解决方案。我修改了模块条目。 第一个解决方案有效,但为什么需要这么奇怪的方法??【参考方案2】:如果要使用 3.1 版,则需要使用以下架构:
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd
请注意,3.0 和 3.1 是不同的:在 3.1 中没有提到 Sun,因此只需将 3_0.xsd
更改为 3_1.xsd
将不起作用。
它应该是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:web="http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
</web-app>
另外,请确保您使用 pom.xml
中的最新版本。也就是说,
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
...
</configuration>
</plugin>
和
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
最后,您应该使用 Java 7 或 8 进行编译:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
【讨论】:
这是拥有一个干净的 maven 项目(没有那些 .settings 和其他 eclipse 垃圾)的实际解决方案,使用 eclipse 的人仍然能够正确打开。也适用于 javax:javaee-api 依赖项。 在我的 web.xml 文件中更改 web-app 架构引用(并告诉 Eclipse 更新 Maven 项目)就成功了。 这个答案应该被标记为正确的解决方案,因为它是。干净而直接的基于 Maven 的! 这并没有回答最初的问题,如何恢复到 3.0,而是提出了一种升级到 3.1 的方法。 注意当前的maven-war-plugin版本是2.6,maven-compiler-plugin是3.3(不用groupId
)。另外,您应该添加<!DOCTYPE xml>
。然后,您应该在 xsi:schemaLocation
中使用两个 URI:只需将 " xmlns:web="
部分更改为一个空格即可。【参考方案3】:
我遇到了同样的问题,并通过编辑 org.eclipse.wst.common.project.facet.core.xml 解决了这个问题。
在这个文件中,我可以更改以下行
<installed facet="jst.web" version="3.1"/>
返回
<installed facet="jst.web" version="3.0"/>
这似乎解决了我的问题。
【讨论】:
你拯救了我的一天!非常感谢!!【参考方案4】:我在 Win7、Tomcat7 上运行,在 Eclipse Mars 上设置了 maven-pom,并启用了 maven 项目。 在未运行的服务器上,我只需在此屏幕上从 3.1 更改为 3.0:
对我来说,禁用动态 Web 模块很重要!然后更改版本,然后再次启用动态 Web 模块。
【讨论】:
【参考方案5】:打开 Eclipse 项目属性,在 Project Facets 中取消选择“Dynamic Web Module”,...点击确定 Maven -> 更新项目
【讨论】:
【参考方案6】:在特定情况下,问题是由于为动态 webapp 发布的 maven-archetype-webapp,面向 ver.2.5(请参阅生成的 web.xml 和相关的 xsd),并且与 eclipse 相关。 当您尝试将项目方面更改为动态 webapp > 2.5 时,src 文件夹结构将在语法上发生变化(2.5 与 3.1 不同),但不会在本质上发生变化。
这就是为什么如果你应用更改会遇到空指针异常。
要解决这个问题,您必须从项目方面配置中设置默认配置。应用更改,然后进入 Java 构建路径,您必须删除 /src 文件夹并至少创建 /src/main/java 文件夹(还需要 /src/main/resources 和 /src/test/java合规)重新更改为您想要的所需配置(3.0、3.1),然后应用。
【讨论】:
【参考方案7】:我打开项目 org.eclipse.wst.common.project.facet.core.xml 并首先更改然后删除带有 web 模块标记的行。每次清理项目并在 Tomcat 上启动,但它仍然没有运行。返回线路(原样)并清理项目。在 Eclipse 中打开 Tomcat 设置并手动将项目添加到 Tomcat 启动中(右键单击 + 添加和删除)。单击项目并选择在服务器上运行....一切都很好。
【讨论】:
【参考方案8】:1) 进入你的项目,找到“.settings”目录this one 2) 打开文件 xml 命名为: org.eclipse.wst.common.project.facet.core.xml 3)
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<fixed facet="wst.jsdt.web"/>
<installed facet="java" version="1.5"/>
<installed facet="jst.web" version="2.3"/>
<installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
将 jst.web 版本更改为 3.0,将 java 版本更改为 1.7 或 1.8(基于您当前使用的 jdk 版本)
4) 更改WEB-INF
目录下的web.xml
文件,请参考这篇文章:https://www.mkyong.com/web-development/the-web-xml-deployment-descriptor-examples/
5) 转到pom.xml
文件并粘贴以下行:
<build>
<finalName>YOUR_PROJECT_NAME</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source> THIS IS YOUR USING JDK's VERSION
<target>1.8</target> SAME AS ABOVE
</configuration>
</plugin>
</plugins>
</build>
【讨论】:
【参考方案9】:-
转到工作区位置
选择您的项目文件夹
.setting 文件夹
编辑“org.eclipse.wst.common.project.facet.core”
更改已安装的 facet="jst.web" version="3.0"
【讨论】:
以上是关于动态 Web 模块 3.0 -- 3.1的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse 动态 Web 模块 3.0 的 Apache tomcat 问题
如何在没有动态 Web 模块 3.0 facet hacks 的情况下将 jdk 9 maven spring boot 2 项目导入 eclipse ee 氧气?