50

我有一个基于代码的 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>
4

9 回答 9

72

我在 eclipse 中遇到了类似的麻烦,唯一解决它的方法是

  • 移除网页模块
  • 申请
  • 更改模块版本
  • 添加模块
  • 配置(对话框底部的更多配置可用链接)
  • 申请

只需确保在应用之前配置 web 模块,默认情况下它会在 /WebContent/ 中查找您的 web 文件,这不是 Maven 项目结构应有的。

编辑

这是第二种方法,以防没有其他帮助

  • 退出 eclipse,进入文件系统中的项目,然后进入 .settings 文件夹。
  • 打开org.eclipse.wst.common.project.facet.core.xml进行备份,然后删除 web 模块条目。
  • 您也可以在那里修改 Web 模块版本,但同样不能保证。
于 2013-10-29T15:53:40.007 回答
62

如果要使用 3.1 版,则需要使用以下架构:

  • http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd

请注意,3.0 和 3.1 是不同的:在 3.1 中没有提到 Sun,因此简单地更改3_0.xsd3_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>
于 2014-07-25T18:08:34.820 回答
10

我遇到了同样的问题,并通过编辑 org.eclipse.wst.common.project.facet.core.xml 解决了这个问题。

在这个文件中,我能够更改以下行

<installed facet="jst.web" version="3.1"/>

回到

<installed facet="jst.web" version="3.0"/>

这似乎解决了我的问题。

于 2014-12-09T17:26:43.667 回答
3

我在 Win7、Tomcat7 上运行,在 Eclipse Mars 上设置了 maven-pom,并启用了 maven 项目。在未运行的服务器上,我只需在此屏幕上从 3.1 更改为 3.0: 在此处输入图像描述

对我来说,禁用动态 Web 模块很重要!然后更改版本,然后再次启用动态 Web 模块。

于 2015-08-30T17:57:10.550 回答
2

打开 Eclipse 项目属性,在 Project Facets 中取消选择“Dynamic Web Module”,... 点击 OK Maven -> Update project

于 2017-01-03T14:22:07.550 回答
1

在特定情况下,问题是由于 maven-archetype-webapp 为动态 webapp 发布的,面向 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),然后应用。

于 2015-10-07T10:01:59.927 回答
0

我打开了项目 org.eclipse.wst.common.project.facet.core.xml 并首先更改然后删除了带有 web 模块标记的行。每次清理项目并在 Tomcat 上启动,但它仍然没有运行。返回线路(原样)并清理项目。在 Eclipse 中打开 Tomcat 设置并手动将项目添加到 Tomcat 启动中(右键单击 + 添加和删除)。单击项目并选择在服务器上运行....一切都很好。

于 2015-06-08T18:41:39.627 回答
0

1)转到您的项目并找到“.settings”目录这个
2)打开名为:
org.eclipse.wst.common.project.facet.core.xml的文件 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.xml目录下的WEB-INF文件,请参阅本文:
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>  
于 2017-04-30T03:52:02.523 回答
0
  1. 转到工作区位置
  2. 选择您的项目文件夹
  3. .setting 文件夹
  4. 编辑“org.eclipse.wst.common.project.facet.core”
  5. 更改已安装的 facet="jst.web" 版本="3.0"
于 2019-09-26T08:46:12.267 回答