Javaにおける開発環境の進歩と同時に、ブラックボックス化とそれにともなう課題も発生している。開発現場での課題解決を図る連載第1回では、互換性とサポート期限に焦点を当てる。
Javaにおける開発環境は急速に進歩しており、現場では次のような課題が発生している。すなわち「IDEすなわち統合開発環境の活用により順調にプログラムは完成したが、デバッグ段階においてJava VMに起因する問題に遭遇しJavaを取り巻く環境のブラックボックス化が進んだため、いかにして問題を解決すべきか分からない」といったものである。このような声に応えるため、本連載では次の課題を中心に、ブラックボックス化されたJava環境について解説する。
なお第1回となる本稿では、Javaの実行基盤であるJava VMの互換性とサポート期限の問題について解説する。
互換性とサポート期限の問題について解説するにあたり、JavaVMについて復習しておく。
Java言語はコンパイラを必要とするプログラミング言語であり,ユーザーはJava言語でソースプログラムを記述し、作成したソースプログラムをJavaコンパイラでコンパイルする。コンパイル結果はバイトコードを含むクラスファイルとなる。このクラスファイルを実行するのがJava VMである。
Java VMはWindowsやUNIXといったさまざまなOSの上で、Javaプログラムを実行する仮想マシンである。プラットフォームの違いはJava VMが吸収するため、どのプラットフォームでプログラムを実行する場合も1つのソースプログラムだけを記述すればよい。
Java VMはJavaのクラスライブラリとともに、JDK(Java Development Kit)あるいはJRE(Java Runtime Environment)として提供される。プログラム開発を行う場合はJDKが必要となるが、アプリケーションの実行やブラウザ上でJavaを動かすJava Plug-inを利用するだけならJREをインストールすればよい。
Windows環境におけるJDKとJREの関係を図に示す。JDKにはJREには無いコンパイラなどが含まれている。
開発環境であることや、慣れているからと言う理由だけで、バージョンについての検討を怠っていないだろうか? JDKはサンマイクロシステムズ(以下、サン)のサイトから、JDK1.3や最新のJDK 6、開発中のJDK 7までがダウンロード可能になっている。
バージョン | 主な特徴 |
---|---|
Java SE7(開発中) | ダイナミック言語のサポート、非同期I/Oの実現 |
Java SE6 | スクリプト言語への対応 |
J2SE 5.0 | Genericsの追加 |
J2SE 1.4 | Assertionの追加 |
J2SE 1.3 | HotSpot JavaVMの導入 |
これらは同じマシン上で同居も可能だが、開発を行う場合には、どのバージョンを利用しているかの明確化が重要である。バージョン不整合により、エラーに遭遇してしまう。例えばJDK 6のコンパイラを利用して作成したクラスファイルは、J2SE 5.0のJRE(Java VM)では動作しない。新しいJDKでコンパイルしたクラスを古いJREで動作させようとすると、次のエラーが発生する。
java.lang.UnsupportedClassVersionError
上記のエラーはコンパイル環境(JDK)と実行環境(JRE)のバージョンが異なる場合に出力される。対策としては、コンパイル環境と実行環境のバージョンを同じにする必要がある。
Javaでのプログラム開発では、JDKに含まれるJavaコンパイラから直接ソースプログラムをコンパイルすることは少なくなっている。EclipseなどのIDEやAntといったツールを利用してコンパイルやプログラムの実行を行う場合がほとんどである。このような場合でも、どのJDK・JREを利用しているかはきちんと確認しておく必要がある。後から気がついたのでは修正に多大な日数を要するだけでなく、品質にも影響を与えるからだ。
Copyright © ITmedia, Inc. All Rights Reserved.