50

尝试编译 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 时不需要 web.xml 。@WebServlet

我在一个单独的配置文件中编译我的小部件集(根据指南),当我运行这个配置文件时它编译得很好。但是,当我只编译 web 项目时,我得到了上面提到的错误。

是什么赋予了?

我是否以某种方式覆盖了 Maven 行为?Vaadin 甚至没有创建 WEB-INF 目录。我想我可以创建 WEB-INF 文件夹并在其中保留一个“幽灵”web.xml 以保持 maven 快乐,但这似乎不对。

我错过了什么吗?

有谁知道一个好的解决方案?

4

4 回答 4

109

默认情况下,如果找不到 web.xml,maven-war-plugin 将失败,请参见此处。如果您使用最新的原型创建 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。

于 2013-08-12T12:24:41.010 回答
3

我在这里遇到了类似的错误,但使用 Eclise Luna (4.4) 和 Maven 3.0

我最终这样做了:

  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 package并查看 BUILD SUCCESS (for WAR)

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

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

但是maven没有接,最好按照maven文件夹结构

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

于 2015-06-03T17:04:17.197 回答
1

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

至少在 Maven 版本 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

于 2016-10-22T16:09:54.323 回答
0

可能是您没有遵循此处描述的标准 Maven 目录布局Maven 目录布局

于 2015-05-28T07:39:52.973 回答