2

Linux と IBM メインフレームの両方でデュアル ビルドされた Java アーティファクトがあります。すべての依存シェル スクリプト (/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 が意図したとおりに機能しないのはなぜですか? バグですか?

4

1 に答える 1

2

resources:copy-resourcesのドキュメントを注意深く読むと、次のように書かれてい<encoding>ます。

リソースのフィルタリング時に適用される文字エンコード方式。

フィルタリングを行っていない場合、resourcesプラグインは単純にバイトごとのコピーを行います。指定されたエンコーディングを使用してリソースを変換する場合は、プロパティ補間を使用していなくても、フィルタリングを有効にする必要があります。

編集:

確認しただけです。指定されたエンコーディングは、ファイルの読み取り書き込みの両方で使用されますが、これは直感に反するようです。DefaultMavenFileFilter.javaの依存関係チェーンの144 行目を見ると、次のようになりますmaven-resources-plugin:3.0.1

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>構成パラメーターを導入するために、メンテナーに改善チケットを提出してください (そうでない場合は、自分でこれを行うことを考えています)。
  • ピンチの場合は、プラグインの独自のフォークを作成してください。あなたの仕事をメインの開発の流れに貢献できれば、もちろん素晴らしいことです。
于 2016-10-18T06:54:41.533 に答える