Servlet 3.0需要webxml属性

在尝试编译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 API 3.0和Annotation @WebServlet不需要web.xml

我正在编译我的widgetset在一个单独的configuration文件(根据本指南),它编译罚款时,我rnu这个configuration文件。 但是,当我只编译web项目时,我得到上面提到的错误。

是什么赋予了?

我以某种方式重写了maven的行为吗? Vaadin甚至没有创build一个WEB-INF目录。 我想我可以创buildWEB-INF文件夹,并在那里保留一个“鬼”web.xml,以保持maven快乐,但这似乎不正确。

我错过了什么吗?

有谁知道这个好的解决scheme?

默认情况下,如果找不到web.xml,maven-war-plugin会失败,请看这里 。 如果你使用最新的原型创buildMaven项目,你会得到这个参数设置为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而不是注释,只需创buildWEB-INF / web.xml并在其中定义servlet,请参阅Vaadin Book以获取详细说明。

我在这里降落了一个类似的错误,但在Maven 3.0中使用Eclise Luna(4.4)

我结束了这样做:

  1. WebContent \ WEB-INF \ web.xml移动src \ main \ webapp \ WEB-INF \ web.xml

  2. 使用<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> 
  1. 运行mvn软件包并查看BUILD BUILDING(WAR)

在此之前,我尝试使用web.xml文件的原始path

 <webXml>WebContent\WEB-INF\web.xml</webXml> 

但是maven没有检测到,最好遵循maven文件夹结构

http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

从版本3.0.0开始, maven-war-plugin可以在没有web.xml

至lessMaven版本3.3.9,包装war 绑定到一个老版本的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)回答如何手动设置参数为false

可能是因为你没有按照这里所描述的Maven目录布局来遵循标准的Maven目录布局