当我试图编译一个Vaadin WAR时,我得到了这个错误:
Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project testvaadin-web: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
我知道这个错误意味着maven找不到我的web.xml,但在“Vaadin之书”中,它说当在UI类中使用Servlet API3.0和注释@WebServlet
时,不需要web.xml。
我在一个单独的配置文件中编译我的小部件集(根据this指南),当我运行此配置文件时,它编译得很好。然而,当我只编译web-project时,我得到了上面提到的错误。
怎么回事?
我是否以某种方式重写了maven行为?Vaadin甚至没有创建WEB-INF目录。我想我可以创建WEB-INF文件夹,并在其中保留一个“幽灵”web.xml,以保持maven的快乐,但这似乎并不正确。
我是不是遗漏了什么?
有谁知道解决这个问题的好办法吗?
发布于 2013-08-12 20:24:41
默认情况下,如果找不到web.xml,maven-war-plugin将失败,请参阅here。如果您正在使用最新的原型创建Maven项目,则会将此参数设置为false:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
如果您想使用web.xml而不是注释,只需创建WEB-INF/web.xml并在那里定义servlet,请参见Book of Vaadin以获取详细说明。
发布于 2015-06-04 01:04:17
我在这里遇到了类似的错误,但使用的是Eclise露娜(4.4)和Maven3.0
我最终这样做了:
将WebContent\WEB-INF\web.xml移动到src\main\webapp\WEB-INF\web.xml
<webXml>
以指定web.xml的位置
org.apache.maven.plugins maven-compiler-plugin 3.0 src\main\webapp\WEB-INF\web.xml ${project.artifactId}
在此之前,我尝试使用web.xml文件的原始路径
<webXml>WebContent\WEB-INF\web.xml</webXml>
但是maven没有选择它,最好遵循maven文件夹结构。
http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
发布于 2016-10-23 00:09:54
从3.0.0版本开始,maven-war-plugin
开箱即用,没有web.xml
。
至少是Maven3.3.9版本的打包war
binds to a older version of the maven-war-plugin
,因此您需要在pom.xml
中显式设置版本
<project>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
</project>
早期版本的maven-war-plugin
在缺省情况下将参数failOnMissingWebXml
设置为true
,这就是导致问题的原因。如果需要使用旧版本的插件,请参阅Sergey Makarovs answer了解如何将参数手动设置为false
。
https://stackoverflow.com/questions/18186590
复制相似问题