maven-war-plugin

董法
2023-12-01

maven-war-plugin用来打包web项目的依赖、类和资源。
参考Apache官方介绍:https://maven.apache.org/plugins/maven-war-plugin/

本文参考3W学习方法来叙述内容。

一、What

1、maven-war-plugin的官方介绍?

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

2、maven-war-plugin是打war包必须安装的吗?

war插件非maven默认安装的插件,当需要为web项目打war包时,可选择安装该插件。

二、Why

1、war插件的功能?

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

三、How

1、有哪些常用功能的使用示例?

  • 【DONE:80%】添加和过滤外部 Web 资源
  • 【TODO】WAR 清单自定义
  • 【TODO】快速测试 Jetty 插件
  • 【TODO】创建瘦身战争
  • 【TODO】在 WAR 中包含和排除文件
  • 【TODO】使用文件名映射

2、添加和过滤外部 Web 资源

所有 Maven 项目的默认资源目录是src/main/resources,它将被打包至在 WAR中的target/classes和WEB-INF/classes中。目录结构将在此过程中保留。

2.1、WAR 插件通过webResources参数包含在默认资源目录中找不到的资源。

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

2.2、WAR 插件通过webResources参数,包含/排除资源

...
<configuration>
    <webResources>
        <resource>
            <!-- this is relative to the pom.xml directory -->
            <directory>resource2</directory>
            <!-- the list has a default value of ** -->
            <includes>
            <include>**/*.jpg</include>
            </includes>
            <!-- there's no default value for this -->
            <excludes>
            <exclude>**/image2</exclude>
            </excludes>
        </resource>
    </webResources>
</configuration>
...

PS:混合包含和排除时要小心,排除将具有更高的优先级。如果资源与两者都匹配,则包含不能覆盖排除。

2.3、WAR 插件通过webResources参数,过滤资源(暂不常用,先略过)

2.4、WAR 插件通过webResources参数,覆盖默认目标目录

默认情况下,Web 资源被复制到 WAR 的根目录,如前面的示例所示。要覆盖默认目标目录,请指定目标路径。

...
<configuration>
    <webResources>
        <resource>
            ...
        </resource>
        <resource>
            <directory>configurations</directory>
            <!-- override the destination directory for this resource -->
            <targetPath>WEB-INF</targetPath>
        </resource>
    </webResources>
</configuration>
...
 类似资料: