Eclipse で Java8!

Eclipse ではまだ Java8 に対応していません。(正式にリリースされていないのであたり前)

Eclipse 以外の IDE (IntelliJ IDEA, NetBeans など) だと実行はできるようですが、Eclipse ではコンパイルすらできません。
これは EclipseJDKコンパイラではなく内蔵のコンパイラを使用していることに起因しています。

ただ、このままでは納得がいかないので、頑張って Eclipse でも Java8 を実行してみたいと思います。

Java8 のインストール

JDK8 Developer Preview はここからダウンロード。

ラムダ式を使いたい場合はこっち。

今回は後者を使います。

Eclipse の設定

Eclipse は Juno (4.2) を利用してみます。
ダウンロードはこちらから。

JDK の追加

Preferences -> Java -> Installed JREs で JDK8 を追加します。(Java7 も追加してあると精神的に優しいです)


プロジェクトの設定

Eclipse 内蔵コンパイラを実行している犯人は「Java Builder」です。
なので、Java Builder ではなく Ant によりコンパイルをするように変更してしまいます。

コンパイラの指定

とりあえず一番近い 1.7 を指定しておきます。

Ant の記述

プロジェクトの適当な位置に build.xml を作成します。

内容はこんな感じで。

<?xml version="1.0" encoding="UTF-8"?>
<project name="project" basedir="." default="compile">
	<target name="compile">
		<mkdir dir="bin" />
		<javac srcdir="src" destdir="bin" debug="true" debuglevel="lines,vars,source" />
	</target>

	<target name="clean">
		<delete dir="bin" failonerror="false" />
	</target>
</project>

デバッグ実行ができるように、javac タスクにはデバッグ用のオプションも指定しておきます。
ソースディレクトリや出力先ディレクトリの指定は必要に応じて。

Builders の設定

Preference -> Builders

New -> Ant Builder

設定は以下のような感じ。

Clean の Target も指定。

「Separate JRE」に JDK8 を指定。

Java Builder」は不要なので、チェックは外しておく。

実行してみる

Java の記述
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class HelloJava8 { 

    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(10, 12, 8, 5);
        // 降順にソート
        Collections.sort(list, (o1, o2) -> o2 - o1);
        System.out.println(list.toString());
    }
}

エディタ上ではエラーになりますが、Eclipse構文解析が Java8 に対応していないのでここは諦めます。

ビルドする

と、ここで問題発生!

C:\workspace\hello-java8\build.xml:5: Class not found: javac1.8

どうやら Eclipse 4.2 にバンドルされている Ant(1.8.3) がバグって]おり、Java8 のコンパイルができなくなっている模様。

Ant ランタイムを変更

Apache Ant の 1.8.2*1 をダウンロードして、適当な場所に展開。

Eclipse の Preferences -> Ant -> Runtime で Ant Home に Ant 1.8.2 の展開先ディレクトリを指定。

もう一回実行してみる

コンパイルが通って、

無事動きました!

まとめ

なんか色々と納得のいかない箇所がありますが、とりあえず新しい機能を試したりする分には問題無さそうです。
Java8 が正式にリリースされた暁には問題なく動くにようになることと思います。

*1:最新バージョン(2012/07/16現在) の 1.8.4 でもダメだった