用法

有 4 种方式使用 WAR 插件:

  • 使用项目包类型为war的包阶段
  • 战争的召唤:战争目标
  • 战争的召唤:爆炸的目标
  • 战争的召唤:就地目标

注意:使用war:目标时,假定编译阶段已经完成。WAR 插件不负责编译 java 源代码或复制资源。

要处理存档此版本的 Maven WAR 插件,请使用Maven Archiver 2.6。

要处理过滤此版本的 Maven WAR 插件,请使用Maven Filtering 1.3。

使用带有项目包类型的阶段作为战争/战争的调用:战争目标

这是使用 WAR 插件的正常方式。为了说明,这里是我们项目的pom.xml :

<project>
  ...
  <groupId>com.example.projects</groupId>
  <artifactId>documentedproject</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Documented Project</name>
  <url>http://example.com</url>
  ...
</project>

该项目的结构如下所示:

 |-- pom.xml
 `-- src
     `-- main
         |-- java
         |   `-- com
         |       `-- example
         |           `-- projects
         |               `-- SampleAction.java
         |-- resources
         |   `-- images
         |       `-- sampleimage.jpg
         `-- webapp
             |-- WEB-INF
             |   `-- web.xml
             |-- index.jsp
             `-- jsp
                 `-- websource.jsp

调用

mvn package

要么

mvn compile war:war

将生成 WAR 文件target/documentedproject-1.0-SNAPSHOT.war。以下是该 WAR 文件的内容:

documentedproject-1.0-SNAPSHOT.war
  |-- META-INF
  |   |-- MANIFEST.MF
  |   `-- maven
  |       `-- com.example.projects
  |           `-- documentedproject
  |               |-- pom.properties
  |               `-- pom.xml
  |-- WEB-INF
  |   |-- classes
  |   |   |-- com
  |   |   |   `-- example
  |   |   |       `-- projects
  |   |   |           `-- SampleAction.class
  |   |   `-- images
  |   |       `-- sampleimage.jpg
  |   `-- web.xml
  |-- index.jsp
  `-- jsp
      `-- websource.jsp

战争的召唤:爆炸的目标

为了加快开发阶段的测试,war:explode可用于生成分解形式的 WAR。使用与上面相同的项目并调用:

mvn compile war:exploded

这将在target/documentedproject-1.0-SNAPSHOT中生成 WAR 的分解版本。该目录的内容如下所示:

 documentedproject-1.0-SNAPSHOT
 |-- META-INF
 |-- WEB-INF
 |   |-- classes
 |   |   |-- com
 |   |   |   `-- example
 |   |   |       `-- projects
 |   |   |           `-- SampleAction.class
 |   |   `-- images
 |   |       `-- sampleimage.jpg
 |   `-- web.xml
 |-- index.jsp
 `-- jsp
     `-- websource.jsp

展开的 WAR 的默认目录是target/<finalName>。finalName通常采用< artifactId>-<version>的形式。可以通过指定webappDirectory参数覆盖此默认目录。

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          <webappDirectory>/sample/servlet/container/deploy/directory</webappDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

战争的召唤:就地目标

war:exploded的另一个变体是war:inplace。使用war:inplace会在 webapp 源中创建分解的 WAR,默认为src/main/webapp。使用我们上面的示例项目,并调用:

mvn compile war:inplace

这将导致:

 |-- pom.xml
 |-- src
 |   `-- main
 |       |-- java
 |       |   `-- com
 |       |       `-- example
 |       |           `-- projects
 |       |               `-- SampleAction.java
 |       |-- resources
 |       |   `-- images
 |       |       `-- sampleimage.jpg
 |       `-- webapp
 |           |-- META-INF
 |           |-- WEB-INF
 |           |   |-- classes
 |           |   |   |-- com
 |           |   |   |   `-- example
 |           |   |   |       `-- projects
 |           |   |   |           `-- SampleAction.class
 |           |   |   `-- images
 |           |   |       `-- sampleimage.jpg
 |           |   `-- web.xml
 |           |-- index.jsp
 |           `-- jsp
 |               `-- websource.jsp
 `-- target
     `-- classes
         |-- com
         |   `-- example
         |       `-- projects
         |           `-- SampleAction.class
         `-- images
             `-- sampleimage.jpg