maven-resources-plugin 的使用
maven-resources-plugin: https://maven.apache.org/plugins/maven-resources-plugin/
在maven的生命周期中其中一环就是 resources,主要就是将 src/resources 还有 src/test/resources下的文件弄到 target/去。但是由于操作系统默认文件编码格式不一样,导致一些特殊的文件resources这一环不指定统一编码格式时就会出现 Linux可以直接通过 mvn clean install 成功,Window和Mac出现 Input length = 1
的错误。
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.3.0:resources (default-resources) on project mevoco: filtering D:\zstack-repos\zstack\premium\mevoco\src\main\resources\license\genlicreq to D:\zstack-repos\zstack\premium\mevoco\target\classes\license\genlicreq failed with MalformedInputException: Input length = 1 -> [Help 1]
其中主流的解决方法是在 pom.xml 中添加就能解决这个问题
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
但是我遇到这个问题时情况很特殊,项目里面已经有了一百多个 pom.xml文件,然后gitlab分支也有一百多个。为了达到全平台能够执行 mvn clean install,这一个一个pom.xml文件起来有点蛋疼。
- 然后开始研究怎么在命令行中直接设置
maven-resources-plugin
的encoding
参数。 类似 mvn clean install -Dresources.encoding=UTF-8 。但是以失败告终 - 单独 mvn resources:resources 失败,然后用完整命令行指定 resources插件版本 mvn org.apache.maven.plugins:maven-resources-plugin:3.0.2:resources 发现成功。观察日志比较区别多输出了
Using 'UTF-8' encoding to copy filtered resources.
$ mvn resources:resources
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building mevoco 4.6.0
[INFO] ------------------------------------------------------------------------
[INFO]
####
#### 不指定时使用的 3.9.2
####
[INFO] --- maven-resources-plugin:3.0.2:resources (default-cli) @ mevoco ---
[debug] execute contextualize
####
#### 特别注意这一行
####
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 6 resources
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.375s
[INFO] Finished at: Tue Jun 20 11:22:10 CST 2023
[INFO] Final Memory: 27M/428M
[INFO] ------------------------------------------------------------------------
既然发现通过命令行设置 encoding 无效(这里面也尝试过各种环境变量设置 encoding也都是失败告终),山不转水转既然低版本的 maven-resources-plugin 会自动设置 encoding=utf-8,那么我降级 maven 版本去找低版本的来用不也是在解决问题 还什么都不用改。
我最开始使用的是 maven 3.9.2 试了几个新版本的都不行,索性降到了 3.0.5 版本成功。(这里版本太多就没逐一尝试所有版本了)
maven所有版本的下载地址:https://archive.apache.org/dist/maven/maven-3/3.0.5/binaries/
虽然问题解决了,但是也希望有人能指点下从命令行如何设置 maven-resources-plugin的encoding参数问题