用法

有 4 种方式使用 WAR 插件:

  • 使用package项目包类型为的阶段war
  • war:war目标的调用
  • war:exploded目标的调用
  • war:inplace目标的调用

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

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

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

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

这是使用 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:exploded目标

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

mvn compile war:exploded

这将在target/documentedproject-1.0-SNAPSHOT. 该目录的内容如下所示:

 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>3.3.2</version>
        <configuration>
          <webappDirectory>/sample/servlet/container/deploy/directory</webappDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

调用war:inplace目标

的另一个变体war:explodedwar:inplace。随着war:inplace爆炸的 WAR 是在 webapp 源中创建的,默认为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