我得到以下错误:

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

我有web.xml在正确的地方,这是projectname\src\main\webapp\WEB-INF\web.xml

是什么导致了这种情况?


当前回答

这对我也有用。

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

其他回答

如果您正在从基于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>

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

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

看起来web.xml在正确的位置,但即使如此,这个错误通常是由目录结构与Maven期望看到的不匹配引起的。例如,如果您从一个试图用Maven构建的Eclipse web应用程序开始。

如果这是问题所在,一个快速的解决方法是创建一个 Src /main/java和a Src /main/webapp目录(和其他目录,如果你需要他们),只是移动你的文件。

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

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

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

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

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

右键单击项目文件夹 在上下文菜单中,选择“打开模块设置”,然后单击+添加web部署描述符。 然后你可以改变你的描述符或Web资源目录的路径。 然后你会得到这样的东西:

如果你能提供你的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>