カテゴリー別アーカイブ: IDE

MacでJava7環境の日本語扱いの問題について(eclipse, IntelliJ IDEA)


Macに標準でインストールされているJavaはAppleから提供されているJDK1.6系のものです。JDK1.7系はすでにリリースされているのでその最新のJDK1.7(java7)を利用するようにしたいと思いますよねー!!
Oracleのサイトから最新のJavaをインストールするには、以下を確認すればインストールできると思います。
http://www.java.com/ja/download/faq/java_mac.xml

■インストール後にバージョンを確認してみる

% java -version
java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

これで、java7系が無事インストールできていると思います。

そこでテストコードを書く時などをわかりやすくするために、 日本語でテストメソッド を書くことも多いと思います。そんな時に日本語がうまく認識できずに「ClassNotFoundException」となってしまいます。どうにか解決するようにちょっと試行錯誤してみました。

EclipseやIntellij IDEAなどのIDEからテストを実行する時に発生する問題で、コマンドラインからテストを実行すればとくに問題はおきません。

自分の場合はMavenを利用してHogeTestというテストを実行するために「mvn test -Dtest=HogeTest」のコマンドを実行しても問題無く実行することが出来ました。


Eclipseでの日本語問題の解決方法

以下の様なテストクラスがあったとします。

public class HogeTest {

    @Test
    public void テストメソッド() {
        assertTrue(true);
    }

}

単純に実行した時点では「ClassNotFoundException」になってしまいます。
次の記事を参考にEclipseで実行時に使用するVMの引数に「-Dsun.jnu.encoding=UTF-8」というオプションを指定してあげれば日本語メソッドも解決出来ます。
JUnit のテストメソッド名に日本語を使ったときの問題の解決法 (Java 7)

しかし、以下のようにEnclosedを用いてネストしたテストクラス名を日本語とした場合

同じく「ClassNotFoundException」になってしまいます。

@RunWith(Enclosed.class)
public class HogeTest { 
    public static class ネストしたテストクラス {
        @Test
        public void ネストテストメソッド() {
            assertTrue(true);
        }
    }
}

これはちょっと、謎なんですが、以下のコマンドでeclipseを起動してあげると解決します。今のところこの方法で起動するようにすればとりあえず日本語のクラス名やメソッド名でも問題無く実行できるようになります。

% open /Application/eclipse/Eclipse.app

なんとなく、腑に落ちないのですがとり上記コマンドをエイリアス貼って起動するようにしています。


Intellij IDEAでの日本語問題の解決方法

基本的にはEclipseと同様に日本語のクラス名やメソッドがある場合「ClassNotFoundException」となってしまいます。
以下の2つの手順を実行すれば解決します!

  1. IntelliJ IDEA の日本語テストメソッド名の実行で再度ハマった話
    Run => Edit Configrations => Defaults => JUnit の VM options に “-Dsun.jnu.encoding=UTF-8” を追加する。

  2. IntelliJ IDEA + Spock で日本語テストメソッド実行時にハマった話
    「/Applications/IntelliJ\ IDEA\ 12\ CE.app/Contents/Info.plist」ファイル(Info.plist)を開いて、VMOptions の string の最後に「-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8」を追加する。 IntelliJ IDEAまでのPathは環境に合わせて適宜変更してください。

「1」 についてはEclipseのVM引数と同じですねー。
「2」 については記事内にもあるのですが、テストクラスでテストメソッドを指定して実行しようとした時の対処です。この設定を入れなくてもテストクラス全体を一気に実行する場合は問題無く実行できます。

これでそれぞれのIDE上でとりあえず日本語の問題は解決できると思います!