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

我正在开发一个基于Java的纯配置Spring MVC项目。当我进行Maven全新安装时,我收到以下错误。

未能在 Project 上执行 goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) SpringMVC-ShoppingCart: 组装 WAR 时出错:需要 webxml 属性(或预先存在的 WEB-INF/web.xml如果在更新模式下执行)-> [帮助 1]

错误说缺少,但我没有,因为我使用了纯Java的配置。web.xml

如何确保项目在没有战争文件的情况下构建和创建war文件?web.xml


答案 1

发生此错误的原因是,在版本 2.6 或更低版本中,maven-war 插件默认期望 WAR 项目中存在一个文件,但它没有找到它。src/main/webapp/web.xml

使用批注并升级到 3.0.0 或更高版本

从插件的 3.0.0 版本开始,默认情况下不再强制存在 a:web.xml

的缺省值已从 更改为 。failOnMissingWebXmltruefalse

这意味着升级插件直接解决了问题。您可以在 POM 中添加以下配置:

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <version>3.0.0</version>
</plugin>

原因是从Servlet 3.0开始,Web应用程序中不再需要该文件,并且可以用注释替换以具有基于Java的配置(MWAR-262)。但是,由于您的项目可能不使用注释来替换此文件(在这种情况下,实际上可能会丢失注释),因此在插件的 3.0.1 版中添加了健全性检查,以确保注释@WebServlet位于 WAR 项目 (MWAR-396) 的编译类路径中。如果不是,并且项目中没有文件,则默认情况下插件仍将失败。web.xmlweb.xmlweb.xml

忽略缺失的web.xml

如果您只想让插件显式忽略丢失的文件,而不考虑注释的用法,则可以将 failOnMissingWebXml 参数设置为 。示例配置是:web.xmlfalse

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

答案 2

这是因为您尚未在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


推荐