我有一个针对linux和Linux双重构建的java工件。 IBM大型机,所有依赖的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没有按预期运行?这是一个错误吗?
答案 0 :(得分:2)
如果您仔细阅读resources:copy-resources的文档,则说明<encoding>
:
过滤资源时应用的字符编码方案。
如果您没有进行过滤,resources
插件将只执行逐字节复制。如果您希望使用指定的编码转换资源,则需要启用过滤,即使您没有使用属性插值。
<强>编辑:强>
我刚刚证实了这一点。在读取和写入文件时都会使用指定的编码,这似乎是违反直觉的。如果您查看DefaultMavenFileFilter.java
依赖关系链中maven-resources-plugin:3.0.1
的第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>
配置参数。