如果我将mack-war-plugin配置为在缺少web.xml时失败,为什么缺少web.xml失败呢?

这是一个挑战:为什么这个版本失败了?

我已经配置了Maven的maven-war-plugin,在一个绝对的web.xml文件中不会失败,似乎:

 org.apache.maven.plugins maven-war-plugin   prepare-war prepare-package  false false   true    ${build.number} ${project.name} ${user.name} ${os.name} ${build.date}      ./target/dist       

但是,尽管有这种配置,它仍然像这样失败:

 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.4:war (default-war) on project com.specktro.orchid.operations.portal.frontend: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1] 

我实际上没有web.xml,所以我需要它来组装没有它的战争。

我尝试在配置中添加一个伪造的none ,但这没有改变任何东西……

我错过了什么?

POM中的执行ID是prepare-war 。 Maven为包装类型为war项目运行自己的war插件默认执行。 默认执行具有ID default-war 。 由于当前配置了POM,因此war目标正在运行两次。

如果您查看错误消息:

 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.4:war (default-war) on project com.specktro.orchid.operations.portal.frontend: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1] 

您可能会在括号中看到失败的执行ID (default-war) 。 如果您将执行ID更改为default-war您的问题将会消失,并且您将不再执行两次战争目标的执行。

这应该工作:

   org.apache.maven.plugins maven-war-plugin  false    prepare-war prepare-package  false   true    ${build.number} ${project.name} ${user.name} ${os.name} ${build.date}      ./target/dist       

请注意, false部分已移至插件配置而非执行。