【问题标题】:Maven error while building WAR package (web.xml missing..?)构建 WAR 包时出现 Maven 错误(缺少 web.xml ..?)
【发布时间】:2011-03-09 08:21:51
【问题描述】:

在执行mvn install 时,我收到以下错误:

组装 WAR 时出错:webxml 属性 是必需的(或预先存在的 WEB-INF/web.xml 如果在更新中执行 模式)

我的网络应用结构树是这样的:

my-app
|-- pom.xml
|-- src
    |-- ...
    |-- WebContent
        |-- ...
        |-- META-INF
        |-- WEB-INF
            |-- classes
                |-- ...
            |-- lib
            |-- **web.xml**

我的 POM 文件如下所示:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>masters.traffic</groupId>
  <artifactId>traffic_web</artifactId>
  <packaging>war</packaging>
  <name>traffic_web</name>
  <version>0.1.0</version>
  <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>                    
                </configuration>
            </plugin>
        </plugins>
  </build>

    ...
</project>

如何正确解决该问题?

问候

【问题讨论】:

    标签: java maven-2


    【解决方案1】:

    强烈推荐使用Maven's standard layout

    • 将 Java 源代码放入 src/main/java(并删除 sourceDirectory 元素)
    • 将 Web 应用程序源放入 src/main/webapp
    • 移除WEB-INF下的classeslib目录

    当然,您可以自定义布局,但这对 IMO 来说是麻烦和无用的努力,而不是好处。只需遵守约定即可。

    【讨论】:

    • 谢谢!我花了很多时间来弄清楚为什么 JSF 没有渲染,并且我在不同的目录中有 WEB-INF,然后,摆弄 IDEA .iml 文件,我通过为 web.xml 添加部署描述符让它工作, 奇怪的是这然后停止工作.. 我想现在它会永远工作;)
    【解决方案2】:

    我的猜测是 maven-war-plugin 正在寻找 src/main/webapp/WEB-INF/web.xml,但找不到它,并希望您明确指定(非 Maven 标准)位置。如果您无法将 WebContent 重命名为 webapp 并将其移动到 src/main/ 下(推荐),您可以尝试将类似这样的内容添加到您的 &lt;build&gt;

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <configuration>
        <webXml>${basedir}/src/WebContent/WEB-INF/web.xml</webXml>
        <warSourceDirectory>${basedir}/src/WebContent</warSourceDirectory>
      </configuration>
    </plugin>
    

    【讨论】:

    • 如果我的网络应用程序中没有 web.xml 怎么办?
    • @Vivek 添加 false 到配置
    【解决方案3】:

    看看这条评论:

    Maven: Including a META-INF folder in the classes folder

    我相信 Maven 需要一个名为“webapp”的文件夹,而不是“WebContent”。

    【讨论】:

      【解决方案4】:

      我最近遇到了这个问题,问题是我的资源类没有在类的顶部指定初始路径。每个方法都指定了一个路径,但没有指定初始路径。

      例子:

      @Path("/")
      public class MyResource {
      
      @GET
      @Produces("text/html")
      public String foo() {
          return "foo";
      }
      
      @GET
      @Path("pt")
      @Produces("text/html")
      public String bar() {
          return "bar";
      }
      

      可以正常工作。但是,

      public class MyResource {
      
      @GET
      @Produces("text/html")
      public String foo() {
          return "foo";
      }
      
      @GET
      @Path("pt")
      @Produces("text/html")
      public String bar() {
          return "bar";
      }
      

      不会

      【讨论】:

        【解决方案5】:

        如果您使用的是 eclispe,请确保右键单击该项目并创建一个 Maven“项目”。您可以使用 mvn generate:archetype -B -cpu 从命令行批量编译,但您可能必须手动构建一些东西。这样,它将作为 Web 应用程序或客户端应用程序运行。将此代码添加到 pom.xml。

        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
            </plugins>
        

        【讨论】:

          猜你喜欢
          • 2015-06-20
          • 1970-01-01
          • 2023-03-31
          • 2017-01-06
          • 2020-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-28
          相关资源
          最近更新 更多