Resources插件负责处理项目资源文件并拷贝到输出目录。Maven将main resources和test resources分开,一般main resources关联main source code,而test resources关联test source code。
Resources插件目标有三个:
- resources:resources,拷贝main resources到main output directory。它绑定了process-resources生命周期阶段,当执行Compiler:compile插件目标前就会执行此阶段。
- resources:testResources,拷贝test resources到test output directory。它绑定了process-test-resources生命周期阶段,当执行surefire:test插件目标前就会执行此阶段。
- resources:copy-resources,手动拷贝资源到输出目录
可以指定resources插件读取和写入文件的字符编码,比如ASCII,UTF-8或UTF-16。也可以指定${project.build.sourceEncoding}属性。
UTF-8
也可以通过<configuration>指定编码
maven-resources-plugin 3.0.2 UTF-8
默认情况下,Maven会从项目的src/main/resources目录下查找资源。如果你的资源不在此目录下,可以用<resources>标签指定,同时也支持多个目录。
src/main/resources1 src/main/resources2
有的时候,资源文件中存在变量引用,可以使用<filtering>标签指定是否替换资源中的变量。变量的来源为pom文件中的<properties>标签中定义的变量。也可以在<build>中定义过滤器资源。
filter-values.properties src/main/resources true
可能目录下的资源文件都需要被使用,可以使用<includes>和<excludes>来精细控制。
src/main/resources **/*.txt **/*.rtf **/*.bmp **/*.jpg **/*.jpeg **/*.gif
如果资源中本来存在${}字符,不需要被替换,可以在$前加\,并在<configuration>中使用<escapeString>。
maven-resources-plugin 3.0.2 \ UTF-8
另外目录下存在二进制文件,需要排除,也可以在<configuration>中使用<nonFilteredFileExtensions>根据后缀来过滤。
maven-resources-plugin 3.0.2 UTF-8 swf
如果你需要在其他阶段拷贝资源文件,可以使用插件目标copy-resources。
maven-resources-plugin 3.0.2 copy-resources validate copy-resources ${basedir}/target/extra-resources src/non-packaged-resources true
解决java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
当项目依赖其他jar包的时候,打出的jar包执行出错,抛出这个异常。
原因:因为依赖jar包中的META-INF中有多余的.SF文件与当前jar包冲突,
-
解决方案 一
在打包前删除依赖jar包的.SF文件
-
解决方案 二
在打完的jar包执行zip -d your.jar 'META-INF/.SF' 'META-INF/.RSA' 'META-INF/*SF'