代码之家  ›  专栏  ›  技术社区  ›  jwaliszko

生成war包时出现maven错误(缺少web.xml….?)

  •  9
  • jwaliszko  · 技术社区  · 15 年前

    执行时 mvn install ,出现以下错误:

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

    我的Web应用程序结构树如下所示:

    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>
    

    如何正确解决这个问题?

    当做

    5 回复  |  直到 9 年前
        1
  •  19
  •   Pascal Thivent    15 年前

    强烈地 推荐使用 Maven's standard layout :

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

    Sure, you can customize the layout but this is IMO more troubles and useless efforts than benefits. Just follow the conventions.

        2
  •  13
  •   Lauri Lehtinen    15 年前

    我的猜测是 maven-war-plugin 正在寻找 src/main/webapp/WEB-INF/web.xml ,但找不到,希望您显式指定(非Maven标准)位置。如果不能重命名 WebContent webapp 把它移到下面 src/main/ (推荐),您可以尝试向 <build>

    <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>
    
        3
  •  1
  •   Community CDub    8 年前

    请看下面的评论:

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

    我相信Maven希望有一个叫做“webapp”的文件夹,而不是“webcontent”。

        4
  •  0
  •   Ben Siver    14 年前

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

    例子:

    @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
  •  0
  •   2 revs<br/>user4294909&#13;    9 年前

    如果您使用eclispe,请确保右键单击该项目并创建一个maven“项目”。您可以使用mvn generate:architetype-b-cpu从命令行编译为一批更新,但您可能需要手动构造一些东西。这样,它将作为Web应用程序或客户端应用程序运行。Add this code to 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>