Maven中的“ webxml属性为必需”错误


318

我收到以下错误:

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

web.xml来对地方了projectname\src\main\webapp\WEB-INF\web.xml

是什么原因造成的?


1
您的包装将在pom中大放异彩吗?
皇冠

我遇到了同样的问题,更新插件版本解决了它。
TechnocratSid

Answers:


359

如果您可以提供maven-war-plugin的代码段,将很有帮助。看起来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>

36
也为我工作,谢谢。但是Maven搜索的默认位置是什么?
水牛城

5
我刚刚将Maven War插件从2.1.1更新到了2.4,并且需要明确指定默认位置。
xverges

2
您可能想为ItelliJ IDEA用户更新答案-IntelliJ创建了另一个项目结构,因此它是<webXml> web \ WEB-INF \ web.xml </ webXml>
Vic Torious

尝试了您的答案,但仍然收到相同的错误,而不是我执行了“ C:\ Users \ xxxx \ Videos \ maven-projects \ my-project \ src \ webapp \ WEB-INF”,并且运行良好。我不知道这是什么问题。这是我的运气。谢谢
Bunny Joel

1
很棒!Thx :)
yanike

145
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

此解决方案对我有效(我之前使用过2.2)。另外,我正在使用基于Java的Servlet 3.0配置,因此不需要web.xml文件。


该插件的3.x版本现在默认将failOnMissingWebXml设置为false。因此, <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> 就足够了。
Eisenknurr

像我以前一样为我工作,现在仍在使用jboss-web.xml-谢谢!
JGlass

我有一个没有web.xml的项目,这对我有用。Maven构建成功。
blueSky

81

它也非常适合我。

<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>

4
上述面时启用和的WebContent是文件夹的作品,其中的web.xml推移英寸
拉姆


23

如果要从基于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>

之前也给出过类似的回答
Paul Verest '16

这提供了上下文,确切说明了该行需要去的地方。
foo

20

我的webXml标记的值必须像这样才能正常工作:

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

究竟!直到我看到我在开始时只有一个斜线<warSourceDirectory>\src\main\webapp</warSourceDirectory>才行不通!不要在V2.6
亚当

19

我有完全相同的问题,我这样解决了它:

制作一个名为新文件夹WEB-INF下,src/main/webbapp然后

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

这应该生成您的 web.xml

我希望这可以解决您的问题:D


13

看起来好像您在正确的位置具有web.xml,但是即使如此,此错误通常是由于目录结构与Maven期望看到的不匹配而引起的。例如,如果您首先尝试使用Maven构建的Eclipse Webapp。

如果是问题所在,快速解决方案是创建
src/main/java
src/main/webapp目录(如果需要其他目录),然后移动文件。

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


6

如果更改默认项目路径,则必须指定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>

6

根据文档,它说:如果缺少web.xml文件,是否使构建失败。如果要在没有web.xml文件的情况下构建WAR,请设置为false。如果您要构建没有web.xml文件的叠加层,这可能会很有用。默认值为true。用户属性是:failOnMissingWebXml。

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

希望它更清楚


5

它也对我有用。

        <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

与erwineberhard相同。WEB-INF\web.xml already added, skipping
Prachi

4

mvn-war-plugin 2.3修复了此问题:

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

4

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

用Eclipse重新生成部署描述符

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

用IntelliJ重新生成部署描述符

  1. 右键单击您的项目文件夹
  2. 在上下文菜单中,选择“打开模块设置”,然后单击+添加Web部署描述符。 生成部署描述符
  3. 然后,您可以将路径更改为描述符或“ Web资源目录”以及右侧的。
  4. 然后您将得到类似: 项目结构

1
在netbeans中,您将:右键单击项目节点>新建>其他> Web>标准部署描述符(web.xml)。
破旧的

2

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

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


2

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

为了解决此问题,我给Web文件夹命名为webapp,并将其放置在src / main中。Maven似乎默认在/src/main/webapp/WEB-INF/web.xml中查找web.xml 。如果这样做,则无需显式告诉maven web.xml在哪里。而且,如果您更改了文件夹结构,并且您的构建最近停止工作,则可能是原因。

注意:这是一篇旧文章,但是发布的解决方案并未指出为什么可以正常工作的构建突然停止工作。


2

答案很多,大多数都可以使用,但是我想再说一点,我认为这一点同样重要。
根据您的日志消息,您正在使用maven。Maven是基于某些约定的项目管理构建工具。它构建项目,创建适当的目录结构,并将文件放入与Sun Microsystems Directory Structure StandardJava EE / Web应用程序兼容的相应目录中。

您可能会合并许多内容,包括maven插件,更改/重新配置项目根目录等,但是您可以执行一个简单的步骤,您的项目就可以了。只要放在web.xml下面,src\main\webapp\WEB-INF\并尝试使用构建项目mvn package

我希望这可以为这个问题提供更多的启示。


1

发生此错误的原因是,您告诉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应用程序单独运行。
Giorgi Tsiklauri,

1

🔴自2020年以来的failOnMissingWebXml

关于其他所有答案可能已过时,因为maven-war-plugin使用的默认值更改

从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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.