Maven 中的“需要 webxml 属性”错误

Posted

技术标签:

【中文标题】Maven 中的“需要 webxml 属性”错误【英文标题】:"webxml attribute is required" error in Maven 【发布时间】:2011-07-18 03:22:23 【问题描述】:

我收到以下错误:

组装 WAR 时出错:需要 webxml 属性(如果在更新模式下执行,则需要预先存在的 WEB-INF/web.xml)

我在正确的位置找到了web.xml,即projectname\src\main\webapp\WEB-INF\web.xml

这可能是什么原因造成的?

【问题讨论】:

你的包装在 pom 中是否准备好了? 我遇到了同样的问题,更新插件版本解决了。 【参考方案1】:

这是一个老问题,答案很多,大部分都会或多或少有帮助;但是,有一个非常重要且仍然相关的点,没有一个答案涉及(相反,提供了不同的技巧来使构建成为可能),而且我认为它的重要性丝毫不亚于......相反. 根据您的日志信息,您使用的是项目管理工具Maven,严格遵循conventions, over configuration原则。

Maven 构建项目时:

    它希望您的项目具有特定的目录结构,以便它知道在哪里可以期待什么。这称为Maven's Standard Directory Layout; 在构建期间,它还会创建适当的目录结构并将文件放置到相应的位置/目录中,这符合 Java EE [web] 应用程序的 Sun Microsystems Directory Structure Standard

您可以合并许多东西,包括 maven 插件、更改/重新配置项目根目录等,但更好和更容易的是遵循配置的默认约定,根据该约定,(现在是您问题的答案)那里一个简单的步骤可以使您的项目工作:只需将您的 web.xml 放在 src\main\webapp\WEB-INF\ 下,然后尝试使用 mvn package 构建项目。

【讨论】:

【参考方案2】:

确保在编译你的战争之前运行mvn install

【讨论】:

【参考方案3】:

根据文档,它说:如果 web.xml 文件丢失,是否使构建失败。如果您希望在没有 web.xml 文件的情况下构建 WAR,请设置为 false。如果您正在构建没有 web.xml 文件的覆盖,这可能很有用。 默认值为:真。 用户属性为:failOnMissingWebXml。

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <extensions>false</extensions>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

希望它更清楚

【讨论】:

【参考方案4】:

它也对我有用。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <webXml>WebContent\WEB-INF\web.xml</webXml>
    </configuration>
</plugin>

【讨论】:

它有效,但日志现在显示:WEB-INF\web.xml already added, skipping。这很奇怪,当我不添加这个时,我得到了错误。 与 erwineberhard 相同。 WEB-INF\web.xml already added, skipping【参考方案5】:
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

这个解决方案对我有用(我之前使用的是 2.2)。另外,我正在为 Servlet 3.0 使用基于 Java 的配置,并且不需要 web.xml 文件。

【讨论】:

该插件的 3.x 版本现在将 failOnMissingWebXml 默认设置为 false。所以,&lt;plugin&gt; &lt;artifactId&gt;maven-war-plugin&lt;/artifactId&gt; &lt;version&gt;3.2.3&lt;/version&gt; &lt;/plugin&gt; 就足够了。 像以前一样为我工作,并且仍在使用 jboss-web.xml - 谢谢! 我有一个没有 web.xml 的项目,这对我有用。 Maven 构建成功。【参考方案6】:

? failOnMissingWebXml 自 2020 年起

关于the default value used by the maven-war-plugin changed的所有其他答案可能已过时:

从 3.1.0 开始,如果项目依赖于 Servlet 3.0 API 或更高版本,则此属性默认为 false。

所以你要做的唯一就是添加

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

示例:

<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
        http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <tomcat.ignorePackaging>true</tomcat.ignorePackaging>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

【讨论】:

【参考方案7】:

出现此错误是因为您告诉 Maven 将文件打包到 war

<packaging>war</packaging>

你真的需要战争吗?如果没有,把罐子放在那里。 这是完整的代码:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <version>1.0-SNAPSHOT</version>

    <groupId>com.your.groupid</groupId>
    <artifactId>artifactid</artifactId>
    <packaging>jar</packaging>

【讨论】:

罐子和战争是完全不同的故事。我认为这里需要战争,因为存档正在部署到 Web 容器中,并且没有作为独立的 jar 应用程序单独运行。【参考方案8】:

我遇到了完全相同的问题,我是这样解决的:

然后在src/main/webbapp下新建一个文件夹WEB-INF

右键单击您的项目 -> Java EE 工具 -> 生成部署描述符存根

这应该会生成您的web.xml

我希望这有助于解决您的问题:D

【讨论】:

【参考方案9】:

这是因为你没有在你的 web 项目中包含 web.xml 并试图使用 maven 构建战争。要解决此错误,您需要在 pom.xml 文件中将 failOnMissingWebXml 设置为 false

例如:

<properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>   
</properties>

更多详情请查看博客:https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html

【讨论】:

【参考方案10】:

我在测试服务器上遇到了同样的错误,但在本地没有。几分钟后,我发现 IDE 没有与 pom.xml 同步。这是我的解决方法:

用 Eclipse 重新生成部署描述符

    右键单击您的项目文件夹 在上下文菜单中,选择“Java EE 工具”,然后选择“生成部署描述符存根” 它将创建 web.xml。

使用 IntelliJ 重新生成部署描述符

    右键单击您的项目文件夹 在上下文菜单中,选择“打开模块设置”,然后单击 + 以添加 Web 部署描述符。 然后您可以更改描述符的路径Web资源目录以及右侧的。 然后你会得到类似:

【讨论】:

在 netbeans 中,您可以:右键单击项目节点 > 新建 > 其他 > Web > 标准部署描述符 (web.xml)。【参考方案11】:

您的文件夹结构是否已更改,因此文件不再位于 /src/main/webapp/WEB-INF/web.xml 中?

为了解决这个问题,我将我的 web 文件夹命名为 webapp,并将其放在 src/main.xml 中。默认情况下,Maven 似乎在 /src/main/webapp/WEB-INF/web.xml 中查找 web.xml。如果你这样做,那么你不需要明确告诉 maven web.xml 在哪里。如果您更改了文件夹结构并且您的构建最近停止工作,这可能就是原因。

注意:这是一篇旧帖子,但发布的解决方案没有指出为什么工作构建会突然停止工作。

【讨论】:

【参考方案12】:

如果你能提供你的 maven-war-plugin 的代码 sn-p 将会很有帮助。 看起来web.xml 在正确的位置,您仍然可以尝试明确给出位置

<plugin>            
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
    <webXml>src\main\webapp\WEB-INF\web.xml</webXml>        
  </configuration>
</plugin>

【讨论】:

也为我工作,谢谢。但是 Maven 搜索的默认位置是什么? 我刚刚将 maven war 插件从 2.1.1 更新到 2.4,不再需要明确默认位置。 您可能希望为 ItelliJ IDEA 用户更新您的答案 - IntelliJ 创建另一个项目结构,因此它将是 web\WEB-INF\web.xml 试过你的答案,但仍然得到同样的错误,而不是我做了这个 "C:\Users\xxxx\Videos\maven-projects\my-project\src\webapp\WEB-INF" 和工作得很好。我不知道是什么问题。这是我的运气。谢谢【参考方案13】:

如果您正在从基于 XML 的配置迁移到基于 Java 的配置,并且通过实现 WebApplicationInitializer 消除了对 web.xml 的需求,则只需消除对存在 web.xml 文件的需求。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        ... 
    </configuration>

【讨论】:

之前给出了类似的答案 这个给出了上下文,该行需要去哪里。【参考方案14】:

mvn-war-plugin 2.3 修复了这个问题:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
        </plugin>
        ...

【讨论】:

【参考方案15】:

如果更改默认项目路径,则必须指定web.xml文件的位置,例如:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <webXml>src\main\web\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>

【讨论】:

【参考方案16】:

确保 pom.xml 正确放置在 Project 文件夹中。而不是在目标文件夹或其他任何地方。

看起来 pom.xml 没有相对对齐。

【讨论】:

【参考方案17】:

看起来您的 web.xml 确实位于正确的位置,但即便如此,此错误通常是由于目录结构与 Maven 期望看到的不匹配造成的。例如,如果您从尝试使用 Maven 构建的 Eclipse Web 应用开始。

如果这是问题所在,快速解决方法是创建一个src/main/java 和一个src/main/webapp 目录(以及其他目录,如果您需要它们)并移动您的文件。

这里是 maven 目录布局的概述: http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

【讨论】:

【参考方案18】:

我的 webXml 标记的值需要看起来像这样才能工作:

<webXml>$project.basedir\src\main\webapp\WEB-INF\web.xml</webXml> 

【讨论】:

没错!直到我看到我在开头只有一个斜线时才弄清楚&lt;warSourceDirectory&gt;\src\main\webapp&lt;/warSourceDirectory&gt; 不起作用!不在 v2.6 中【参考方案19】:

它也适合我。

<project>

.....

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webXml>WebContent\WEB-INF\web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

【讨论】:

上述方法在启用构面并且 WebContent 是 web.xml 所在的文件夹时有效。

以上是关于Maven 中的“需要 webxml 属性”错误的主要内容,如果未能解决你的问题,请参考以下文章

Maven 组装 WAR 时出错:使用纯基于 Java 的配置构建 SpringMVC 项目且没有 xml 时需要 webxml 属性

jboss plexus错误中的maven索引搜索

Maven 构建中的错误:无法识别 mvn.bat

启动fork时出现Maven错误,请检查日志中的输出

maven pom xml文件中的错误:构建Android项目[重复]

由于 pom.xml 中的错误,无法使用 Maven 运行构建