Java 7 にアップデートしたら日本語メソッド名が通らなくなった
- 現象
- クラス全体をテスト実行すると動く
- 日本語メソッドを選択して実行すると動かない
Java 6 の場合には問題なかったのに、7 にアップデートしたら上手いこと動きません。
しかし、6 に戻すとちゃんと動くので、7 が怪しい…と調べてたら、一応動くようになりました *1
「Java 6 の時には問題なかったのに 7 にアップデートしたら上手く動かなくなった!」そんな方にはこのエントリが役に立つかもしれません。
環境は以下のとおりです *2
おすすめエントリ 〜まずはこちらから〜
Eclipse や JUnit と日本語メソッド名については良く知られている問題ですが、それだけに良エントリも多いです。
単なる解決方法だけでなく、しっかりと解説が入っているのが素晴らしいです。
また、当エントリの内容はこちらのエントリを試されていることが前提になっています。
結論: VM のオプションを設定すれば解決する
Eclipse から VM のオプションを設定すればサクッと解決します。
まずは Eclipse の設定画面から Java SE 7 *3 を選択して「編集」ボタンを押します。
続いて「JRE の編集」画面で、
「デフォルトの VM 引数」に「-Dsun.jnu.encoding=UTF-8」を入力して「完了」ボタンを押します。
これで対応は完了です。さっそく試してみましょう。
原因は?
私の環境では VM オプションの「sun.jnu.encoding」が US-ASCII になっていたためでした。
以下のような現象から当たりを付け、VM オプションを調べてみました。
日本語のクラス名 / メソッド名を一切含まないプロジェクトを作成して、Java 6 と Java 7 で実行時のシステムプロパティを調べてみたのが以下のスクリーンショットになります。
(左側が 6, 右側が 7)
左側の53行目で「sun.jnu.encoding=SJIS」となっているところ右側は「US-ASCII」になっています。
SJIS でも正直微妙なところですが、それにしてもなぜ US-ASCII なのでしょうか…
ちなみにターミナルから実行時は「sun.jnu.encoding=UTF-8」と、UTF-8 になります。
ということで、後はこれを Eclipse から VM 起動時のオプションに設定するだけでした。
謝辞
@ebc_2in2crc あんまなにもしてないきがするw
さらっとツイートされてますが、遅くまで付き合って下さってありがとうございます。
一人だったら途中で「いいや」となっていたと思いますし、解決に向かう考えを上手く整理して頂きました。
@enum さん、本当にありがとうございました!