【问题标题】:Why maven-resources-plugin ignores my charset encoding setting?为什么 maven-resources-plugin 忽略我的字符集编码设置?
【发布时间】:2016-10-17 21:10:45
【问题描述】:

我有一个为 linux 和 IBM 大型机双构建的 java 工件,所有依赖的 shell 脚本(在 /sbin 目录中)最初都是用 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 编码,就像我的:

<encoding>IBM037</encoding>

设置不存在。为什么 maven-resources-plugin 不能按预期运行?是bug吗?

【问题讨论】:

标签: java maven encoding ebcdic maven-resources-plugin


【解决方案1】:

如果你仔细阅读resources:copy-resources 的文档,它会说&lt;encoding&gt;

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

如果您不进行过滤,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 时,它可以正常工作。

基本上,您有两种选择:

  • 编写您自己的插件。这种用例并不难。
  • 向维护人员提交改进票(如果您不这样做,我正在考虑自己这样做)以引入 &lt;outputEncoding&gt; 配置参数。
  • 如果您处于紧要关头,请创建您自己的插件分支。显然,如果您能将自己的工作贡献给主要的开发流程,那就太好了。

【讨论】:

  • 试过了,下的true复制的文件仍然是UTF-8。这也与stackoverflow.com/questions/14327003/… 相矛盾。否则我完全同意你的文档:)
  • 我让它工作了,有点。我有一个带有 ISO-8859-1 中瑞典变音符号的文本文件,并使用您的配置使用 UTF-8 复制它。它显然触及了文件,但结果不是我所期望的(它在 读取 文件时应用了 UTF-8 编码)。我将在调试器中运行插件,看看发生了什么。
  • 请参阅上面我最新的 EDITED 部分。
  • 哇,这是一些核心发现,我会尝试在他们的问题跟踪器上发布
  • 发布为issues.apache.org/jira/browse/MRESOURCES-232,再次感谢您解决这个问题!
猜你喜欢
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2014-07-17
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多