Servlet 3.0需要webxml属性

时间:2013-08-12 12:07:57

标签: maven maven-plugin vaadin vaadin7

尝试编译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的快乐,但这似乎不对。

我错过了什么吗?

有没有人知道这个问题的好方法?

4 个答案:

答案 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

我最终这样做了:

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

    < / LI>
  2. 使用<webXml>指定web.xml的位置

  3. <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 package 并查看BUILD SUCCESS(用于WAR)
    2. 在此之前,我尝试使用 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