美文网首页
maven-resources-plugin插件的使用

maven-resources-plugin插件的使用

作者: 求心丶 | 来源:发表于2022-05-21 19:55 被阅读0次
前言

上个月做了一个根据协议模板签署协议的功能,事先把协议模板(pdf文件)放在当前项目的resource目录下,打成jar运行后,在签署协议时,从classpath下读取模板内容然后填充pdf内对应的字段再将签署后的协议上传即可。
在测试时发现虽然能够根据模板生成协议文件并上传,但是把上传后的文件下载到本地打开时提示格式损坏,一开始认为是读取jar内的模板文件获取的输入流有问题(实际上是模板文件有问题),在本地吭呲吭呲一顿debug测试始终没有排查到具体的问题,后来突发奇想看一下打包之后target目录下的模板文件,目录下虽然有模板文件,但是一打开就提示格式损坏,这个时候就意识到了应该是maven打包的时候导致模板文件出了问题。


image.png

然后又开始了面向百度修复bug,一顿百度之后发现了问题,在pom文件中加入以下配置即可

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.4.3</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <nonFilteredFileExtensions>
                        <!--过滤掉pdf文件,不对其进行重新编码-->
                        <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
maven-resources-plugin是什么

先贴上官方文档的地址 maven-resources-plugin
通俗来说,maven-resources-plugin是一个maven打包时进行资源文件复制的插件,使用project.build.resources元素来指定需要复制哪些资源文件。

下面介绍这个插件的一些常用参数

必须参数
  • outputDirectory
    复制资源文件时的输出目录,官网上介绍这个参数是必须参数,但是实际上不设置也行,默认是
    放在${project.build.outputDirectory}目录下
可选参数
  • addDefaultExcludes
    在资源文件复制时是否排除(不复制)的默认文件,默认值是true,开启后会排除以下后缀的文件
    Misc: */~, */##, */.#, */%%, */._
    CVS: **/CVS, /CVS/, **/.cvsignore
    RCS: **/RCS, /RCS/
    SCCS: **/SCCS, /SCCS/
    VSSercer: **/vssver.scc
    MKS: **/project.pj
    SVN: **/.svn, /.svn/
    GNU: **/.arch-ids, /.arch-ids/
    Bazaar: **/.bzr, /.bzr/
    SurroundSCM: **/.MySCMServerInfo
    Mac: **/.DS_Store
    Serena Dimension: **/.metadata, /.metadata/
    Mercurial: **/.hg, /.hg/
    GIT: **/.git, **/.gitignore, **/.gitattributes, /.git/
    Bitkeeper: **/BitKeeper, /BitKeeper/, **/ChangeSet, /ChangeSet/
    Darcs: **/_darcs, /_darcs/, **/.darcsrepo, */.darcsrepo/****/-darcs-backup, **/.darcs-temp-mail
    如果有特殊的原因不需要排除上述默认文件,可以将该值设置成false.

  • encoding
    读写需要被复制的资源文件时使用的字符集,默认是${project.build.sourceEncoding},打包时会使用该字符集将需要复制的资源文件重新编译。

  • propertiesEncoding
    读写属性配置文件时使用的字符集,如果未指定,则使用encoding指定的字符集。

  • nonFilteredFileExtensions
    资源文件复制时不需要重新编译的文件拓展名。

再回到我最开始的问题,在打包后进行资源文件复制时,重新将协议模板文件重新编译了一次,所以导致了协议默认文件格式损坏,因此,只要设置了nonFilteredFileExtension将pdf文件排除即可,在复制时不对其进行重新编译。

以上只是介绍了几个比较常用的属性,其他属性请参考官方文档的说明。

总结

虽然使用了很久的maven,但是更多是把它当作一个黑箱子使用,对其机制原理没有深入了解,官方文档也没怎么看过。说到底还是太菜,以后要省点刷视频的时间,多看看官方文档。

相关文章

网友评论

      本文标题:maven-resources-plugin插件的使用

      本文链接:https://www.haomeiwen.com/subject/gckojrtx.html