連載
» 2006年10月07日 00時00分 公開

小山博史のJavaを楽しむ(2):いろいろなJavaを使ってみよう

教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた 筆者が、独自の視点からJavaの面白さを掘り下げていく。(編集局)

[小山博史,ガリレオ]

 次期バージョンのJavaリリースが迫ってきています。そこで、サンのjava.net以外から手に入れることができるJavaの実装についてご紹介しましょう。

Apacheが開発中のJava「Apache Harmony」

 Apache Harmony ProjectではJ2SE 5と互換性を持つJavaを開発しています。Statusを見るとかなり作業は進んでいるようです。Apache License v2.0というライセンスで配布されていますが、サンのJavaオープンソース化戦略が進んでいるため、それとの関係がどうなるか注目されています。同じようなライセンスでサンのソースコードを参照したりできるようになると、Harmony版の開発を続けるモチベーションが低下する可能性があるからです。これについてはほかのプロジェクトについても同様の心配があります。

Apache Harmony Projectのサイト Apache Harmony Projectのサイト

GNU系のJavaの実装

 GNU Classpathでは、Javaのクラスライブラリの開発をしています。GPLというライセンスで配布されています。多くのJava仮想マシンを開発するプロジェクトで利用されています。

GNU Classpathのサイト GNU Classpathのサイト

 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)で公開されている仮想マシンもあり、研究用途で使われているようです。

Jikesのサイト Jikesのサイト

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>
Eclipseのコンパイラを使うAntビルドファイルの例
> set JDT=C:\eclipse3.1\plugins\org.eclipse.jdt.core_3.1.0
> set CLASSPATH=%JDT%\jdtCompilerAdapter.jar;%JDT%\jdtcore.jar
> ant
WindowsでのEclipseのコンパイラを使ったコンパイルの仕方

BEAが提供するJRokit

 インテルプラットフォームならBEAシステムズが提供するJRockitもあります。最新版であれば、J2SE 5.0と互換性があり、Windows、Linuxで動作します。JRockitのJava Development Kitであればコンパイラも含まれます。インストールは単純なのですぐにできますし、コマンドもjavac、javaといった使い慣れた名前です。WebLogicなどのBEAシステムズ製品を使うときには、これを選択した方がいいかもしれません。

JRockitのサイト JRockitのサイト

 ほかにもたくさんの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)の活動へも参加している。



Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。