Java 为什么maven资源插件忽略我的字符集编码设置?
我为linux和IBM大型机构建了一个java工件,所有依赖的shell脚本(in/sbin dir)最初都是用ASCII编写的,但会复制到另一个目录(in/sbin ebcdic)。因此,我配置了maven资源插件来为我完成这项工作:Java 为什么maven资源插件忽略我的字符集编码设置?,java,maven,encoding,ebcdic,maven-resources-plugin,Java,Maven,Encoding,Ebcdic,Maven Resources Plugin,我为linux和IBM大型机构建了一个java工件,所有依赖的shell脚本(in/sbin dir)最初都是用ASCII编写的,但会复制到另一个目录(in/sbin ebcdic)。因此,我配置了maven资源插件来为我完成这项工作: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-reso
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-sbin</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}/sbin-ebcdic</outputDirectory>
<resources>
<resource>
<directory>${project.basedir}/sbin</directory>
</resource>
</resources>
<encoding>IBM037</encoding>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven资源插件
3.0.1
复制sbin
过程资源
复制资源
${project.basedir}/sbin ebcdic
${project.basedir}/sbin
IBM037
虽然它复制了整个目录,但其中的所有文件仍采用UTF-8编码,就像我的:
<encoding>IBM037</encoding>
IBM037
设置不存在。为什么maven资源插件不能按预期运行?这是一个bug吗?如果您仔细阅读的文档,它会说这是关于
:
筛选资源时要应用的字符编码方案
如果您不进行过滤,那么资源
插件将只进行一个字节对一个字节的复制。如果希望它使用指定的编码转换资源,则需要启用筛选,即使不使用属性插值
编辑:
我刚刚确认了。在读取和写入文件时都使用指定的编码,这似乎违反直觉。如果您查看maven资源插件:3.0.1
的依赖链中DefaultMavenFileFilter.java
中的第144行:
143 fileReader = getFileReader( encoding, from );
144 fileWriter = getFileWriter( encoding, to );
145 Reader src = readerFilter.filter( fileReader, true, wrappers );
146
147 IOUtil.copy( src, fileWriter );
当我在调试时将getFileWriter()
的编码更改为UTF-8
时,它的工作方式与预期的一样
基本上,您有两种选择:
- 编写自己的插件。对于这种类型的用例来说并不难
- 向维护人员提交一份改进通知单(如果您不这样做,我正在考虑自己做),以引入一个
配置参数 - 如果你手头拮据,创建你自己的插件分支。显然,如果你能将你的工作贡献给主要的开发流程,那将是一件好事