Apache Maven WAR插件

x33g5p2x  于2022-10-06 转载在 Apache  
字(4.1k)|赞(0)|评价(0)|浏览(461)

1. 概述

WAR插件负责收集Web应用程序的所有工件依赖、类和资源,并将它们打包成Web应用程序的存档。

2. 插件目标

war:war是在打包阶段调用的默认目标,用于打包类型为war的项目。它构建了一个WAR文件。
war:exploded 通常用于在开发阶段通过在指定的目录中创建一个exploded的Web应用来加速测试。
war:inplace是war:explode的另一个变体,webapp被生成在web应用的源目录下,默认情况下是src/main/webapp。

3. 使用方法

有4种方法来使用WAR插件。

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

3.1 使用项目包类型为war的包阶段/调用war:war goal

这是使用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
## 3.2 Invocation of war:exploded goal

为了加快开发阶段的测试,可以使用war:explode来生成explode WAR。使用与上述相同的项目并调用。

mvn compile war:exploded

这将在target/documentedproject-1.0-SNAPSHOT中生成一个explode 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

explode WAR的默认目录是target/。最终名称通常是<*artifactId>-*的形式。这个默认目录可以通过指定webappDirectory参数来覆盖。

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

3.3 调用_ war:inplace_目标

war:exploded的另一个变化是war:inplace。通过war:inplace,explode 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

4. 实例

4.1 添加网络资源

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.2</version>
        <configuration>
          <webResources>
            <resource>
              <!-- this is relative to the pom.xml directory -->
              <directory>resource2</directory>
            </resource>
          </webResources>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

4.2 定制清单文件

为 WAR 生成清单classpath与为JAR生成清单classpath类似,但有几个细微的差别,因为您通常不希望清单classpath和WEB-INF/lib目录中都有JAR。自定义WAR插件的存档器。

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.2</version>
        <configuration>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
            </manifest>
          </archive>
        </configuration>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

4.3 简单的例子

<plugin>
 <artifactId>maven-war-plugin</artifactId>
 <version>2.4</version>
 <configuration>
  <warSourceDirectory>WebContent</warSourceDirectory>
  <failOnMissingWebXml>false</failOnMissingWebXml>
 </configuration>
</plugin>

6. 总结

在这个快速指南中,我们介绍了War插件,并给出了使用和定制的说明。此外,我们还看到了不同的插件目标和它们的用法。

相关文章