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

时间:2011-03-18 12:25:14

标签: maven war

我收到以下错误:

  

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

我在web.xml

的正确位置projectname\src\main\webapp\WEB-INF\web.xml

导致这种情况的原因是什么?

19 个答案:

答案 0 :(得分:343)

如果您可以提供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>

答案 1 :(得分:130)

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

此解决方案适用于我(之前我使用的是2.2)。另外,我使用Java Based Configuration for Servlet 3.0,不需要web.xml文件。

答案 2 :(得分:80)

它也适合我。

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

答案 3 :(得分:24)

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

例如:

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

请参阅博客了解详情:https://ankurjain26.blogspot.in/2017/05/error-assembling-war-webxml-attribute.html

答案 4 :(得分:20)

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

答案 5 :(得分:19)

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

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

答案 6 :(得分:14)

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

WEB-INF下创建名为src/main/webbapp的新文件夹,然后

右键单击项目 - &gt; Java EE工具 - &gt;生成部署描述符存根

这应生成您的web.xml

我希望通过解决您的问题来解决这个问题:D

答案 7 :(得分:13)

看起来好像你在正确的位置有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

答案 8 :(得分: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>

答案 9 :(得分:5)

mvn-war-plugin 2.3解决了这个问题:

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

答案 10 :(得分:5)

它也适合我。

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

答案 11 :(得分:5)

根据文档,它说:如果缺少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>

希望它更清楚

答案 12 :(得分:4)

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

使用Eclipse

重新生成部署描述符
  1. 右键单击项目文件夹
  2. 在上下文菜单中,选择&#34; Java EE Tools&#34;然后&#34;生成部署描述符存根&#34; Generate web.xml
  3. 它将创建web.xml。 web.xml in project structure
  4. 使用IntelliJ

    重新生成部署描述符
    1. 右键单击项目文件夹
    2. 在上下文菜单中,选择&#34;打开模块设置&#34;,然后单击+以添加Web部署描述符。 Generate the deployment descriptor
    3. 然后您可以更改路径 Web Ressource目录和右侧。
    4. 然后你会得到类似的东西:Project structure

答案 13 :(得分:4)

?2020年以来的failOnMissingWebXml

关于其他所有答案的答案可能已过时,因为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>

答案 14 :(得分:2)

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

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

答案 15 :(得分: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在哪里。如果您更改了文件夹结构,并且您的构建最近停止了工作,那么这就是原因。

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

答案 16 :(得分:2)

发生此错误是因为您告诉Maven将文件包装到 war

<packaging>war</packaging>

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

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

答案 17 :(得分:0)

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

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

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

答案 18 :(得分:0)

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