読者です 読者をやめる 読者になる 読者になる

argius note

プログラミング関連

開発しています



Eclipse 4.3.1 + JDT beta で Java8

Eclipse

現時点(2014-02-05)において、EclipseでJava8を使いたい場合は、Eclipse 4.3.1 (Kepler SR1) にJDTのJava8対応ベータ版を別途インストールすれば良さそうです。
本体の正式リリース後も、次期バージョン(Luna)を待たずに、同じ方法で使える見込みです。


環境

  • Windows7 Professional 32bit
  • Java8 ea (b121)
  • Eclipse: 4.3.1
    • Version: Kepler Service Release 1, Build id: 20130919-0819
  • JDT beta
    • Eclipse Java Development Tools Patch for Java 8 Support (BETA) 1.0.0.v20140203-0104_BETA_JAVA8

セットアップ

Eclipse Java Development Tools Patch for Java 8 Support (BETA)(以下、JDTbetaと表記)については、下記ページを参照。

JDTbetaは、4.3.1, 4.4.M2(Luna)が対象となっています。KeplerはSR1以降、LunaはM2以降で使えるようです。
また、4.4.M5にはまだ標準搭載はされていません。
今回は、開発中のEclipseを使いたいわけではないので、一般向け最新版のKepler SR1で試してみることにします。


Keplerはダウンロードページから最新版をダウンロードし、インストールします。
Eclipseを起動したら、Install New Softwareを開き、下記URLを入力してJDTbetaを追加でインストールします。


あわせて、JDK8をInstalled JREs(インストール済みJRE)に設定します。


以上で、EclipseでJava8を使う準備ができました。


Java8のサポート状況

主に新しい言語機能について確認しました。具体的には、

  • ラムダ式
  • 事実上のfinal
  • 仮想拡張メソッド
  • 実行時のパラメーター名へのアクセス
  • 型への注釈
  • 一般化されたターゲット型付けの型推論
  • 繰り返しアノテーション

は、サンプル程度であれば問題なく使えます。


気になったことは2つあります。

1つ目は、「実行時のパラメーター名へのアクセス」です。
コンパイラーの設定(プロジェクトのプロパティーのJavaコンパイラー)で、"Store method parameter names (usable via reflection)"にチェックを入れるとパラメーター名付きでコンパイルされるようになるのですが、cleanでリビルドすると、パラメーター名が付加されない状態でコンパイルされてしまいます。個別にコンパイル(保存するときの自動ので)すると、ちゃんと付いています。

2つ目は、ある組み合わせのラムダ式のある位置から下で、補完が利かないときがあったということ。
ただし、こちらは再現方法が良く分かりません。制御文に関係していたと思うんですけどね...


追記(2014-02-09): もう1つ見つけました。配列のコンストラクター参照がコンパイルエラーになります。
例えば、Stream#toArrayに配列のコンストラクター参照を指定すると発生します。


Java8対応版JDTの今後

今後のJava8対応版JDTは、

  • 2014-02-17にRC0がリリース予定
  • 2014-03-18には、General availabilityがリリース予定

となっています。本体のリリースと同時に、こちらも一般向けリリースされるみたいです。


ついでにKeplerの使い勝手

私の環境はいまだにIndigo SR2 (v3.7.2)がメインで、Junoの時は導入を見送っていました。
Kepler SR1に標準搭載されているEGitはv3.0.3で、ついに「MacOSX上のGit共有リポジトリをHTTPSで公開してプロキシ経由でWindowsからアクセス」の環境でfetch/pushができるようになりました。他にも、気になっていた点(EGitは残念?)がいくつか解消されているようです。
それ以外は、慣れれば問題なさそうです。


感想

EGitに加えてJava8が使えるようになってしまったら、たぶん性能も良くなってるし、これはもう、Indigoから乗り換えざるを得ないでしょう。(主に私が。)
当分は併用してみることにします。