Apache Maven Resources Plugin插件详解

Apache Maven Resources Plugin用于处理项目中的资源文件,包括main和test资源。它提供了resources:resources和testResources目标,用于复制资源到指定目录。此外,插件支持资源文件的编码设置、非标准路径资源的配置、过滤占位符变量以及防止特定文件过滤。示例展示了如何配置编码、处理非标准路径资源、替换变量以及禁止资源过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache Maven Resources Plugin是Apache Maven团队提供的官方核心插件,能够将Maven项目中的各种资源文件复制到指定的输出目录中。

1. 在Maven项目中的资源可以分为两类

  • main资源,指位于src/main/resources路径下的资源文件
  • test资源,指位于src/test/resources路径下的资源文件

2. Apache Maven Resources Plugin提供的Goals

1) resources:resources

将main资源文件复制到输出目录,默认已经加入到Maven的process-resources生命周期阶段。

  • <project><build><resources>指定要复制的main资源文件,默认位于src/main/resources路径
  • <project><build><outputDirectory>指定main资源的输出目录,默认位于target/classes/路径

2) resources:testResources

将test资源文件复制到输出目录,默认已经加入到Maven的process-test-resources生命周期阶段。

  • <project><build><testResources>指定要复制的test资源文件,默认位于src/test/resources路径
  • <project><build><testOutputDirectory>指定test资源的输出目录,默认位于target/test-classes/路径

3) resources:copy-resources

对于非main资源或非test资源,又没有在pom.xml的<build><resources>...</build></resources>配置的资源,在构建过程中不会输出到项目的target/classes/目录下。

这时,可以通过maven-resources-plugin的<configure>给出要复制的任何资源,并给出target下的输出目录,示例如下:

              <build>
                <plugins>
                  <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.1.0</version>
                    <executions>
                      <execution>
                        <id>copy-resources</id>
                        <!-- bind to a phase, required -->
                        <phase>validate</phase>
                        <goals>
                          <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                          <outputDirectory>${basedir}/target/extra-resources</outputDirectory>
                          <resources>
                            <resource>
                              <directory>src/non-packaged-resources</directory>
                              <filtering>true</filtering>
                            </resource>
                          </resources>
                          <testResources>
                            <testResource>
                              <directory>src/non-packaged-testresources</directory>
                              <filtering>true</filtering>
                            </testResource>
                          </testResources>
                        </configuration>
                      </execution>
                    </executions>
                  </plugin>
                </plugins>
                ...
              </build>

3. 示例

1) 示例1,为资源文件配置encoding编码

通常,在<properties>中为整个项目设置全局的encoding编码,如下:

            <project ...>
             ...
             <properties>
               <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
               ...
             </properties>
             ...

对于有的资源文件,如果不使用项目的全局encoding编码,则可以设置如下:

          <build>
            <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                  ...
                  <encoding>UTF-8</encoding>
                  ...
                </configuration>
              </plugin>
              ...

2) 示例2,配置非src/main/resources路径下的资源文件

      <build>
        <resources>
          <resource>
            <directory>src/resource2</directory>
          </resource>
          ...
        </resources>
        ...

对于指定路径,还可以进一步指定include/exclude的文件

        <build>
          <resources>
            <resource>
              <directory>src/resource2</directory>
              <includes>
                <include>**/*.xml</include>
                <include>**/*.yaml</include>
              </includes>
            </resource>
            ...
          </resources>
          ...
        <build>
          <resources>
            <resource>
              <directory>src/resource2</directory>
              <excludes>
                <exclude>**/*.rtf</exclude>
                <exclude>**/*.txt</exclude>
              </excludes>
            </resource>
            ...
          </resources>
          ...
          <build>
            <resources>
              <resource>
                <directory>src/my-resources</directory>
                <includes>
                  <include>**/*.txt</include>
                </includes>
                <excludes>
                  <exclude>**/*test*.*</exclude>
                </excludes>
                ...
              </resource>
              ...

3) 示例3,替换资源文件中的占位符变量

对于Maven标准的占位符变量,如${project.groupId},${project.artifactId},${project.version},${project.basedir}等,只要在配置<resource>的时候,设置<filtering>true</filtering>即可,如下:

          <build>
            <resources>
              <resource>
                <directory>src/main/resources</directory>
                <includes>
                  <include>**/*.txt</include>
                </includes>
                <excludes>
                  <exclude>**/*test*.*</exclude>
                </excludes>
                <filtering>true</filtering>
              </resource>

这样,执行mvn resources:resources即可。

或者,执行mvn resources:resources -Dname="world",直接给出${name}变量的值。

对于非Maven标准的占位符变量,简单的情况下,直接在<project><properties>...</properties></project>声明,如下:

        <project>
          ...
          <properties>
            <your.name>world</your.name>
            ...
          </properties>

在<resources><resource>...</resource></resources>的文件中引用${your.name}即可。

如果有大量的占位符变量,可以在单独的filter属性配置文件中声明变量,在pom.xml文件中统一过滤,步骤如下:

  • 将要过滤的文件置于独立的路径src/main/resources-filtered
  • 创建文件my-filter-values.properties
your.name = world
  • 配置pom.xml文件
              <build>
                ...
                <filters>
                  <filter>my-filter-values.properties</filter>
                </filters>
                <resources>
                  <resource>
                    <directory>src/main/resources-filtered</directory>
                    <filtering>true</filtering>
                  </resource>
                  ...

4) 示例4,禁止对某些资源文件进行任何替代(如图片文件进行过滤将导致文件被破坏)

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
              ...
              <nonFilteredFileExtensions>
                <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
                <nonFilteredFileExtension>swf</nonFilteredFileExtension>
              </nonFilteredFileExtensions>
              ...

参考链接:

https://maven.apache.org/plugins/maven-resources-plugin/index.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值