为什么maven-resources-plugin忽略我的字符集编码设置



我有一个用于linux "在IBM大型机中,所有依赖的shell脚本(在/sbin dir中)最初都是用ASCII编写的,但被复制到另一个目录(在/sbin-ebcdic中)。所以我配置maven-resources-plugin为我做这件事:

        <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>

虽然它复制整个目录,但其中的所有文件仍然是UTF-8编码,就像my:

<encoding>IBM037</encoding>

设置不存在。为什么maven-resources-plugin不能正常工作?是bug吗?

如果您仔细阅读resources:copy-resources的文档,它是这样描述<encoding>的:

过滤资源时使用的字符编码方案。

如果您不做过滤,resources插件将简单地做一个字节对字节的复制。如果您希望它使用指定的编码转换资源,您需要启用过滤,即使您不使用属性插值。

编辑:

我刚刚确认了。在读取和写入文件时都使用指定的编码,这似乎违反直觉。如果你看一下maven-resources-plugin: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时,它像预期的那样工作。

基本上,你有两个选择:

    写你自己的插件。这对于这种类型的用例来说并不难。
  • 向维护者提交一个改进单(如果你不这样做,我正在考虑自己做),以引入<outputEncoding>配置参数。
  • 如果你在紧要关头,创建你自己的插件分支。显然,如果你能把你的工作贡献给主要的开发流程,那就太好了。

相关内容

  • 没有找到相关文章

最新更新