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


问题内容

我正在开发一个基于纯Java配置的Spring MVC项目。我执行Maven全新安装时出现以下错误。

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

该错误表明web.xml缺少该错误,但是由于我使用了基于纯Java的配置,所以我没有一个错误。

如何确保项目不生成并创建war文件web.xml


问题答案:

发生此错误的原因是maven-war-plugin,在2.6或更低版本中的,默认情况下期望src/main/webapp/web.xmlWAR项目中存在一个文件,但找不到该文件。

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

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

的默认值failOnMissingWebXml已从更改truefalse

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

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

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

忽略失踪 web.xml

如果只希望插件显式忽略丢失的web.xml文件,而不管注释的用法如何,可以将failOnMissingWebXml参数设置为false。示例配置为:

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