いろいろなJavaを使ってみよう:小山博史のJavaを楽しむ(2)
教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた 筆者が、独自の視点からJavaの面白さを掘り下げていく。(編集局)
次期バージョンのJavaリリースが迫ってきています。そこで、サンのjava.net以外から手に入れることができるJavaの実装についてご紹介しましょう。
Apacheが開発中のJava「Apache Harmony」
Apache Harmony ProjectではJ2SE 5と互換性を持つJavaを開発しています。Statusを見るとかなり作業は進んでいるようです。Apache License v2.0というライセンスで配布されていますが、サンのJavaオープンソース化戦略が進んでいるため、それとの関係がどうなるか注目されています。同じようなライセンスでサンのソースコードを参照したりできるようになると、Harmony版の開発を続けるモチベーションが低下する可能性があるからです。これについてはほかのプロジェクトについても同様の心配があります。
GNU系のJavaの実装
GNU Classpathでは、Javaのクラスライブラリの開発をしています。GPLというライセンスで配布されています。多くのJava仮想マシンを開発するプロジェクトで利用されています。
GCJというJavaコンパイラもあります。配布形態はGPLです。JavaソースコードをJavaバイトコードへコンパイルできますし、直接ネイティブな機械語へコンパイルすることもできます。クラスライブラリについては、GNU Classpathと統合を進めているようです。GCJが使用するライブラリのlibgcjにはJavaバイトコードをインタプリタ実行するgijコマンドが同梱されています。javacでコンパイルをしてからjavaコマンドで実行するのと同じように、gcjでコンパイルをしてクラスファイルを生成してからgijで実行することができます。
Kaffeでも、Javaコードを実行する仮想マシンと実行時に必要なクラスライブラリの開発をしています。これもGPLで配布されています。GNU Classpathのクラスライブラリをかなり利用しているようです。
IBMが産みの親「Jikes」
もともとはIBMが開発したJikesというコンパイラもオープンソースライセンスで公開されていて、IBM Public License Version 1.0で利用することが可能です。Jikes RVMというCPL(Common Public License - v 1.0)で公開されている仮想マシンもあり、研究用途で使われているようです。
■gcj、gij、jikesの使い方
gcj、gij、jikesをFedora Core 5で実行する方法について簡単に説明しましょう。gcj、gijはlibgcj、libgcj-devel、java-1.4.2-gcj-compat、java-1.4.2-gcj-compat-develといったパッケージをインストールします。yumを使って依存関係があるパッケージもインストールします。jikesはWebサイトよりバージョン1.22のソースをダウンロードしてコンパイルしたものをインストールできます。jikesを使ってJavaプログラムのコンパイルをするにはCLASSPATHへコアクラスを含むJARファイル(java-1.4.2-gcjに付属しているrt.jar)を追加して実行します。コンパイルして出来上がったSample.classはgijコマンドで実行できます。
$ gcj -C Sample1.java $ /usr/local/jikes-1.22/bin/jikes \ -cp /usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/rt.jar \ Sample2.java $ gij Sample1 This is a sample1. $ gij Sample2 This is a sample2.
統合開発環境としてよく使われているEclipseでJava開発をするときは、Java Development Tooling(JDT)プラグインを使います。このキットにはorg.eclipse.jdt.core、org.eclipse.jdt.core.compilerといったパッケージのクラスライブラリが含まれていて、EclipseのJavaコンパイラを提供しています。確認はしなかったのですが、EclipseもIBMによってオープンソース化されたものであることを考えると内部的にJikesが利用されているのではないかと予測されます。Antのjavac adapterを使ってEclipseのJavaコンパイラを使ったコンパイルもできます。
■EclipseのJavaコンパイラを使ったコンパイル
EclipseのJavaコンパイラを使ったコンパイルをするには、build.compilerプロパティを指定します。ただしAnt実行時にはorg.eclipse.jdt.coreプラグインに含まれるJARファイルをクラスパスへ追加するのを忘れないようにしてください。
<?xml version="1.0" encoding="UTF-8"?> <project name="compile" default="compile"> <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> <target name="compile"> <javac srcdir="src" destdir="bin" debug="on" nowarn="on" source="1.5"> </javac> </target> </project>
> set JDT=C:\eclipse3.1\plugins\org.eclipse.jdt.core_3.1.0 > set CLASSPATH=%JDT%\jdtCompilerAdapter.jar;%JDT%\jdtcore.jar > ant
BEAが提供するJRokit
インテルプラットフォームならBEAシステムズが提供するJRockitもあります。最新版であれば、J2SE 5.0と互換性があり、Windows、Linuxで動作します。JRockitのJava Development Kitであればコンパイラも含まれます。インストールは単純なのですぐにできますし、コマンドもjavac、javaといった使い慣れた名前です。WebLogicなどのBEAシステムズ製品を使うときには、これを選択した方がいいかもしれません。
ほかにもたくさんのJavaがありますので興味を持ったら、読者の皆さんも調べてみてください。コンパイルエラーなどを比較してみるとそれぞれ特長があって面白いです。例えばSample.javaの「System.out...」を「aSystem.out...」とすると、jikesでは「No accessible field named "aSystem" was found in type "Sample".」というエラーになりますが、サンのjavacでは「Sample.java:3: package aSystem does not exist」というエラーになります。Eclipseでは「aSystemを解決できません」というエラーになって、それぞれ違います。よく分からないコンパイルエラーに出合ったときは、コンパイラを変えてみるとヒントが増えることもあるかもしれません。
なお、各プロジェクトが提供するJavaについてAPIの互換性を確認するためにはJava API compatibility testing toolsというツールがあります。GNU ClasspathやKaffeなどとの比較表が公開されています。GPLのものを使いたい場合、商用製品に組み込みたい場合など、いろいろなJavaを使いたい場面があります。用途に適したJavaを選択して開発に役立てていきたいものです。
筆者プロフィール
小山博史(こやま ひろし)
Webシステムの運用と開発、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。Ja-Jakartaプロジェクトへ参加し、コミッタの一員として活動を支えている。また、長野県の地域コミュニティである、SSS(G)やbugs(J)の活動へも参加している。
- ビルドツールGradleのインストールと使い方、Jenkins/Git連携
- JBoss Forgeでアジャイルな対話式開発をやってみた
- JavaとJavaScriptの良いとこ取り? 「Dart」超入門
- 年末でJetty(絶対)にできる Android携帯サーバ活用
- UNIX/Linuxも楽しむ Java開発者になるための学習法
- Subversionならできる! NetBook最強バックアップ術
- 「Javaは遅い」から「Javaは楽しい」に至る歴史
- Javaはクラウドのプラットフォームになり得るのか
- 【新人なるプログラマーへ】ソースコードを読みましょう
- Google Android用携帯アプリ作成のための基礎知識
- デスクトップをJava製ウィジェットでにぎやかに
- そろそろブログ+RSSアプリでも作ってみませんか?
- JavaFXでJava RIA開発はどれくらい変わるの?
- 【新人研修向け特別企画】JavaでPHPを使ってみた
- (Java+Derby)* Ruby on Rails プログラミング
- 待望のJava SE 6 でパーシステンス
- いろいろなJavaを使ってみよう
- JavaとJavaScriptの親しい関係
Copyright © ITmedia, Inc. All Rights Reserved.