构建WAR包时出现Maven错误(web.xml丢失..?)

时间:2010-06-28 21:15:23

标签: java maven-2

执行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 个答案:

答案 0 :(得分:19)

强烈建议使用Maven's standard layout

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

当然,你可以自定义布局,但这比IMO更有麻烦和无用的努力而不是好处。请遵循惯例。

答案 1 :(得分:13)

我的猜测是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>

答案 2 :(得分:1)

看看这条评论:

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

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

答案 3 :(得分:0)

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

示例:

@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";
}

不会

答案 4 :(得分:0)

如果您正在使用eclispe,请务必右键单击该项目并创建一个Maven&#34;项目。&#34;您可以使用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>