尝试编译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,但在“Book of Vaadin”中,当使用Servlet API 3.0和Annotation {时,它表示不需要 web.xml 您的UI类中的{1}}。
我正在一个单独的配置文件中编译我的widgetset(根据this指南),当我输入此配置文件时,它编译得很好。但是,当我只编译web项目时,我得到了上面提到的错误。
是什么给出了?
我是否以某种方式覆盖了maven的行为? Vaadin甚至没有创建WEB-INF目录。我想我可以创建WEB-INF文件夹并在那里保留一个“ghost”web.xml以保持maven的快乐,但这似乎不对。
我错过了什么吗?
有没有人知道这个问题的好方法?
答案 0 :(得分:106)
默认情况下,如果maven-war-plugin找不到web.xml,则会失败,请参阅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。
答案 1 :(得分:3)
我在这里遇到了类似的错误,但是使用了Eclise Luna(4.4)和Maven 3.0
我最终这样做了:
将 WebContent \ WEB-INF \ web.xml 移至 src \ main \ webapp \ WEB-INF \ web.xml
< / LI>使用<webXml>
指定web.xml的位置
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.0</version> <configuration> <webXml>src\main\webapp\WEB-INF\web.xml</webXml> </configuration> </plugin> </plugins> <!-- we dont want the version to be part of the generated war file name --> <finalName>${project.artifactId}</finalName> </build>
在此之前,我尝试使用 web.xml 文件的原始路径
<webXml>WebContent\WEB-INF\web.xml</webXml>
但maven没有选择,最好遵循maven文件夹结构
http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
答案 2 :(得分:1)
从版本3.0.0开始,maven-war-plugin
开箱即用,没有web.xml
。
最多至少Maven版本3.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
。
答案 3 :(得分:0)
可能是您没有遵循此处所述的标准maven目录布局Maven directory layout