Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么maven资源插件忽略我的字符集编码设置?_Java_Maven_Encoding_Ebcdic_Maven Resources Plugin - Fatal编程技术网

Java 为什么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

我为linux和IBM大型机构建了一个java工件,所有依赖的shell脚本(in/sbin dir)最初都是用ASCII编写的,但会复制到另一个目录(in/sbin ebcdic)。因此,我配置了maven资源插件来为我完成这项工作:

        <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
时,它的工作方式与预期的一样

基本上,您有两种选择:

  • 编写自己的插件。对于这种类型的用例来说并不难
  • 向维护人员提交一份改进通知单(如果您不这样做,我正在考虑自己做),以引入一个
    配置参数
  • 如果你手头拮据,创建你自己的插件分支。显然,如果你能将你的工作贡献给主要的开发流程,那将是一件好事

请注意,资源筛选已禁用,因此此问题:不存在。已尝试过此方法,复制的文件下的true仍为UTF-8。这也与我的观点相矛盾。在文档方面,我完全同意你的观点:)我让它开始工作了。我在ISO-8859-1中有一个带有瑞典语发音符号的文本文件,并使用您的配置使用UTF-8复制它。它显然触及了文件,但结果并不是我所期望的(它在读取文件时应用了UTF-8编码)。我将在调试器中运行插件,看看发生了什么。请参阅上面我最新编辑的部分。哇,这是一些核心发现,我将尝试在他们的问题跟踪上发布,再次感谢您解决这个问题!