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)
我结束了这样做:
-
将WebContent \ WEB-INF \ web.xml移动到src \ main \ webapp \ WEB-INF \ web.xml
-
使用
<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>
- 运行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目录布局
- 如何从Plexus组件获取当前的MavenSession或MavenExecutionRequest
- Maven错误:无法find或加载主类org.codehaus.plexus.classworlds.launcher.Launcher
- 如果使用maven,通常你把java或资源下的log4j.properties?
- 有没有办法将jvm的参数通过命令行传递给maven?
- Maven – 总是下载源代码和javadocs
- Gradle – 获取依赖项的最新版本
- pom xml中的依赖和插件标签之间maven有什么区别?
- 如何configuration多模块Maven + Sonar + JaCoCo提供合并报道报告?
- Maven在理论和实践上做了什么? 什么时候值得使用它?