动态 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)。另外,您应该添加&lt;!DOCTYPE xml&gt;。然后,您应该在 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 氧气?

Maven 创建动态web 3.0项目

JSP学习1---创建一个简单的jsp程序

eclipse报错Dynamic Web Module 3.0 requires Java 1.6

浅谈servlet版本