Apache Maven Resources Plugin插件详解

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache Maven Resources Plugin插件详解 的相关文章

  • 如何从 jenkins 的现有项目生成 .hpi 插件

    我正在尝试使用 jenkins 的性能插件 但最新版本存在一些问题 如链接中所述 https issues jenkins ci org browse JENKINS 27100 https issues jenkins ci org br
  • cucumber.json 报告被重新运行场景报告覆盖

    我有一个具有相同技术堆栈 JAVA1 8 Cucumber JVM JUnit Maven 的 UI 测试项目和一个 API 测试项目 这两个项目都向我展示了这个问题 可能是因为两者都存在相同的依赖关系集 我使用了使用 maven sure
  • PHP 中的异步数据库/服务调用:Gearman 与 pthreads

    在我们的 LAMP 站点上 我们遇到一些服务必须多次调用数据库才能提取数据的问题 通常在 PHP 中完成此操作的方式 至少我的经验 是串行的 这显然是低效的 我们可以通过使用缓存和聚合一些查询来缓解一些低效率的问题 但在某些情况下我们仍然需
  • Eclipse Android 不会清理,不会刷新资源

    我升级到Ubuntu 11 10 Eclipse 3 7 0 ADT 14 0 0 当我替换桌面上 res drawable nodpi 目录中的图片资源或 res raw 目录中的声音资源时 重新编译的程序和 Project Explor
  • 每个虚拟主机的错误日志?

    在一台运行 Apache 和 PHP 5 的 Linux 服务器上 我们有多个带有单独日志文件的虚拟主机 我们似乎无法分离 phperror log虚拟主机之间 覆盖此设置
  • 使用 .htaccess 启用 PHP 短标签

    我在自己的 Centos 服务器上设置了 Apache 并具有多个虚拟 Web 服务器 并且我希望仅为位于以下位置的其中一个 Web 服务器启用 PHP 短标记 var www ostickets html 我可以通过添加成功启用短标签sh
  • 在 Apache 服务器上将特定的 .htm 页面处理为 .php [重复]

    这个问题在这里已经有答案了 我正在为 Apache 服务器编程 并且只需要将一个特定的 html 页面 例如 first htm 作为 PHP 脚本进行处理 可以设置吗 SetHandler http httpd apache org do
  • Apache mod_rewrite 将子域重写到子文件夹(通过内部重定向)

    我正在尝试编写一组 mod rewrite 规则 允许我的用户利用单个文件夹在不同项目上进行开发 而不必为每个项目添加虚拟主机 我的想法是为每个需要此功能的用户 仅 3 4 个 设置一个 全局虚拟主机 该虚拟主机类似于 my domain
  • org.apache.http.conn.HttpHostConnectException:在 android 中连接到 http://localhost 被拒绝

    我正在制作一个应用程序 在执行它时将图像上传到服务器并将其数据库更新到android中的服务器 它显示错误 Connection to http localhost refused 还有更多错误 我研究了这个问题 发现不是提供 URL 连接
  • mod_rewrite代理超时

    我有 apache 设置来代理对后端应用程序服务器的请求 有多个后端服务器 并且有一个大的 rewrite rules 文件 针对每个请求进行处理 以正确地将所有请求代理到应用程序服务器 一台特定的应用程序服务器有时需要很长时间才能响应 如
  • 是否可以在httpd.conf中使用变量

    有没有办法useapache httpd conf 文件中的某种变量 我想定义一个值并在整个块中使用它 如 define myvar somename or whatever the syntax would be alias my pat
  • 我怎样才能让我的 nextjs with Express 网站在 ssl 上工作

    我们有一个在 Next js 和 Express 上运行的网站 这是在带有 Aapche 的 cPanel 服务器上 并与用作反向代理的 nginx 一起 我需要在网站上安装 ssl 但我对配置应该如何感到非常困惑 我的 server js
  • Maven:如何确保在类路径中使用带时间戳的快照版本?

    我希望我们的功能测试使用类路径中快照的时间戳版本 例如 api 0 5 0 20110706 191935 1 jar 从 Maven 运行 然而 虽然我可以看到我们的 Artifactory 存储库中有带时间戳的版本 但 Maven 指的
  • Maven:缺少工件 org.springframework:spring:jar:4.2.6

    我在 SpringToolSuite 中有一个动态 Web 项目 它被转换为 Maven 项目 我遇到问题 缺少工件 org springframework spring jar 4 2 6 我已经尝试清理 重建和运行该项目 它给 读取文件
  • Maven:如何获取捆绑在包中的 .so 库

    我有一个带有 jar 和 so 文件的第三方库 我配置了 pom xml 如下
  • 如何将 conda 环境与 mod_wsgi 一起使用?

    我的第一篇文章 我对 Python 和 Apache 都很陌生 所以请对我宽容一些 我在 conda 环境中有一个 Python Web 应用程序 可以使用 Flask 很好地提供内容 现在我需要使用 Apache 而不是 Flask 来提
  • 使用 xamarin 和 c# 更改 android 上的cultureinfo

    我调用自定义方法来动态地将当前文化信息切换为法语 fr 像这样 但在调用该方法后 我的 Android 应用程序仍然使用默认区域性 en 但在调试模式下 区域性似乎没问题 我的文件夹没问题 我两者都有 并且字符串值已配置 文件夹 resou
  • 每次修改代码时都必须 mvn clean install

    我不是来自 Java 世界 但我必须为我的一个项目深入研究它 我不明白为什么每次修改或更新代码时 都必须 mvn clean install 来调试代码的最新版本 你知道为什么吗 尝试按Ctrl Shift F9 热插拔 有时会有所帮助
  • 无法访问属性的默认字段

    我在将应用程序部署到 tomcat 时遇到问题 它以前可以工作 但我格式化了我的计算机 它就停止工作了 我的 pom xml
  • 在 XSSF 工作簿上设置密码保护

    我想为使用 poi 3 14 创建的 xlsx 文件添加密码保护 该文档声称 这是可能的 http poi apache org cryption html http poi apache org encryption html 使用我尝试

随机推荐

  • MySQL字符串拼接的两种方式

    第一种 xff1a MySQL自带语法Concat string1 string2 string3 xff0c 此处是直接把string1和string2等等的字符串拼接起来 xff08 无缝拼接哦 xff09 说明 xff1a 此方法在拼
  • 前端传来的参数后端无法正确接收

    问题 xff1a 今天和前端进行接口联调 xff0c 前端传来的参数如下 xff1a trSpeBadWeatherAttention linkId 34 S32 34 badWeatherType 34 0 34 simulationDa
  • 音乐——时间煮雨

    歌手 xff1a 郁可唯 作词 郭敬明 落落 作曲 刘大江 武部聡志 编曲 黄毅 风吹雨成花 时间追不上白马 你年少掌心的梦话 依然紧握着吗 云翻涌成夏 眼泪被岁月蒸发 这条路上的你我她 有谁迷路了吗 我们说好不分离 要一直一直在一起 就算
  • 物理机安装 Ubuntu18.04 + CUDA + Anaconda (简明图文教程)

    安装过程 xff08 1 xff09 安装 Ubuntu1 1 安装 ultraiso1 2 下载 ubuntu 18 4 系统1 3 制作U盘启动盘1 4 安装操作1 5 磁盘格式化和挂载 xff08 2 xff09 安装 CUDA 环境
  • WinForm界面开发教程——图文并茂的界面设计

    DevExpress WinForm v20 2完整版下载 DevExpress技术交流群3 xff1a 700924826 欢迎一起进群讨论 DevExpress WinForms拥有180 43 组件和UI库 xff0c 能为Windo
  • jdk8——字符串数组按照指定要求分组后取最大值

    要求 xff1a 如下月份数据 xff1a 34 20220901 34 34 20220912 34 34 20220923 34 34 20220929 34 34 20221010 34 34 20221101 34 34 20221
  • https证书识别和转换

    1 证书识别 xff1a 安全证书如下 xff1a BEGIN CERTIFICATE END CERTIFICATE 普通私钥如下 xff1a BEGIN PRIVATE KEY END PRIVATE KEY RSA 私钥如下 xff1
  • svn 常用命令

    svn简介 xff1a Subversion SVN 是一个开源的版本控制系統 也就是说 Subversion 管理着随时间改变的数据 这些数据放置在一个中央资料档案库 repository 中 这个档案库很像一个普通的文件服务器 不过它会
  • 浏览器的知识

    1 浏览器可视窗口大小 43 获取浏览器可视窗口的大小 43 语法 61 gt window innerWidth 61 gt window innerHeight 43 注意 获取的是包含滚动条在内的尺寸 MAC 除外 console l
  • C# winform中 窗体缩放自适应的方法(不同电脑/不同分辨率)

    窗体缩放是一个困扰我多时的问题 xff0c 为了解决这个问题 xff0c 我从网上找了很多相关的资料 xff0c 很多人说用Anchor和Dock属性 xff0c 但是我试了以后 xff0c 始终不能达到想要的效果 后来 xff0c 搜到了
  • Spyder闪退、启动失败的解决办法。UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xa9 in position 226······

    Spyder版本号 Spyder5 1 5 Python 3 9 12 1 闪退时的现象 早上还在用spyder分析数据 xff0c 到下午再打开电脑就发现spyder闪退 xff0c 利用anaconda的prompt进行启动 xff0c
  • IT项目经理如何正确做好项目实施

    本文摘自 光环国际 中国项目管理PMP培训上市企业 对自己的能力有清晰认识 xff1a 局限 你需要客观的评价自己的长处和短处 xff0c 并且着手缩小自己的差距 做软件的人常常被认为缺乏出色的交际能力 你需要加强你的人际处理能力 xff0
  • 解决Centos/Mysqld 重启或关机时间慢问题

    项目场景 xff1a 提示 xff1a centos 8测试环境中 xff0c 将通过二进制安装的服务添加到systemd服务管理中 xff0c 并对其进行测试 xff0c 看是否能满足线上需求 xff0c 即开机自动启动 由于添加到sys
  • You don‘t have enough free space in /var/cache/apt/archives

    在执行 sudo apt install 来安装一些包时候遇到过这个问题 xff0c 网上查了很多资料 xff0c 很多简单粗暴的解决方案如下 xff1a span class token function sudo span apt au
  • mysql创建超级用户,更新用户权限

    insert into user Host User Password Select priv Insert priv Update priv Delete priv Create priv Drop priv Reload priv Sh
  • VNC端口被占用:a vnc server is already running as

    其实这些端口可能是以前的一些用户占用的 当他们离开这太服务器的时候并没有释放资源 后来在网上查找 xff0c 才找到了杀死这些进程的方法 其实每个端口都是vncserver的一个进程 1 所以我们使用 ps ef grep vnc 就能查到
  • 【图像处理】C++实现模板匹配

    预先判断 3 3十字中心 区域是否相似 xff0c 如果相似 xff0c 则再匹配判断 这样可以减少判断次数 前提 xff1a 模板大于9 9 BOOL Judgement BYTE pTempDataBuf BYTE pTemplateB
  • CPython的命令行与python文件的执行

    在Windows系统中 xff0c 下载并安装了Python解析器后 xff0c 就可以运行Python文件了 可以使用任何编辑器 xff0c 编写并保存Python文件 Python运行时提供了多种执行Python文件的方法 1 编写并保
  • Java运行时的shutdown hook

    Hook作为一种回调方式 xff0c 广泛应用于软件中 从Java 1 3开始 xff0c JVM的Runtime也提供了hook的机制 xff0c 即shutdown hook 提供给出shutdown hook xff0c 在退出JVM
  • Apache Maven Resources Plugin插件详解

    Apache Maven Resources Plugin是Apache Maven团队提供的官方核心插件 xff0c 能够将Maven项目中的各种资源文件复制到指定的输出目录中 1 在Maven项目中的资源可以分为两类 main资源 xf