この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

IntelliJ:「この文字は、エンコーディングutf8にマップできません」→依存jarの中にJavaのソースが紛れ込んでいる

英語検索用: “Unmappable character for encoding UTF-8” error -> Your dependant jar will contain invalid encoded java source files.


タイトル通りです。

IntelliJで使用する標準JDKをJava9に更新してからというもの、「この文字は、エンコーディングutf8にマップできません」というエラーが出るようになり、しかもそれがどのファイルに起因するか全く不明という問題に悩まされてました。 IntelliJのどのログファイルを漁っても全くヒントに辿り着けなかった。

もちろん、すべてのファイルは正しくUTF-8エンコードされています。

犯人→jarの中のソースファイル

で、別の理由でコンパイル済みclassの出力先ディレクトリを調べていた所、 なぜか依存ライブラリのクラスファイルが紛れ込んでいる。


はあ?なにこれ?と思いつつ、クラスファイルが生成されてしまった依存ライブラリのjarの中身を見てみると、なんとjavaのソースが紛れ込んでいるではありませんか。 そして、そのエンコーディングShift_JIS。こいつか犯人は。

ちなみに、その依存ライブラリとはこれです。


このソースを取り除いてからフルビルドすると、「この文字は、エ(略)」のメッセージは二度と出なくなりました。

これってIntelliJの仕様?それともバグ?