Javaクラスライブラリ(ジャバクラスライブラリ、JCL)はJavaアプリケーションが実行時に呼び出せる動的ロード可能なライブラリ群である。また、特にJREが提供している java.lang 名前空間他の基本的なクラスを含むライブラリを指すこともある。このライブラリがそれぞれのオペレーティングシステム (OS) あるいはプロセッサ (CPU) の固有機能やシステムライブラリなどを隠蔽して抽象化・標準化する吸収層として働くことで、JavaアプリケーションなどがOSなどのプラットフォームに直接依存することを避けられるようになっている[1]。
JCLはJavaプラットフォーム内で次の3つの役割を担っている。
JCLはほぼ全体がJavaで書かれているが、ハードウェアやOSに直接アクセスする必要のある部分はその限りではない(例えば、入出力、ビットマップグラフィックス)。そのようなアクセスを行うクラスでは、一般にOSのAPIへのラッパーとして Java Native Interface を使用している。
JCLのほぼ全体が単一のJavaアーカイブファイル "rt.jar" に格納されており、JREやJDKの一部として配布されている。Javaクラスライブラリ (rt.jar) はデフォルトのブートストラップクラスパスに置かれ[2]、アプリケーションが一々クラスパスを指定する必要はない。ランタイムではJCLを探すのにブートストラップクラスローダを使う。
任意のJava実装は Java Technology Compatibility Kit のコンプライアンステストに合格する必要があり、そこにJCLについてのテストも含まれている。
JCLの機能には、パッケージでカプセル化されたクラス群を通してアクセスする。
java.lang は、言語とランタイムシステムに密接に関連した基本的なクラスおよびインタフェース群を含む。java.io、java.nio、java.net というパッケージを通して提供する。ネットワークでもSCTPに関しては com.sun.nio.sctp が提供する。java.math は任意精度の整数および小数の演算を提供する。java.awt) はネイティブOSに依存したGUIと2DグラフィックスAPIを提供している。Swingパッケージ (javax.swing) はAWTをベースとしてOS非依存のウィジェット・ツールキットとルック・アンド・フィールを提供する。また、編集可能および編集不可能なテキストコンポーネントも用意している。java.text はテキスト、日付、数値、メッセージを扱う。java.awt.image と javax.imageio はイメージの読み書きや修正のためのAPIを提供する。java.security と暗号サービスを提供する javax.cryptojava.sql がSQLデータベースへのアクセスを提供する。javax.script パッケージにより、任意の対応するスクリプト言語へのアクセスを提供する。java.applet によりアプリケーションをネットワーク経由でダウンロードして保護されたサンドボックス内で動作可能とする。java.beans により、再利用可能なコンポーネント群を操作する手段を提供する。java.lang.Class がクラスを表すが、Method や Constructor といった他のクラスは java.lang.reflect にある。OpenJDKがリリースされる以前、JDKは基本的にプロプライエタリなライセンスだった。2006年、サン・マイクロシステムズはJavaをオープンソースにする意思があると発表。2007年前半にJDKのほぼ全部をオープンソースとしてリリースすると約束した。2007年5月8日、サンがオープンソース化する権利を有していない一部を除いたクラスライブラリのソースコードをGPLライセンスで公開した[3]。その後は、公開できなかった部分をオープンソース化することが目標となった。
オープンソース化できなかった部分は使わないとしても依存関係があるためにビルドには必須であり、「バイナリプラグ」と呼ばれた[4]。サン(と後にオラクル)はコミュニティの協力も得て、バイナリプラグをオープンソース化したりオープンソースの代替品で置換していった。2008年5月にリリースされた OpenJDK 6 ではオープンソース化できていない部分は1%となっていた[5][6]。
2007年5月時点でオープンソース化できていなかった部分(OpenJDK 7 の4%)は次の通りである[7][8]。
2010年12月、「バイナリプラグ」と呼ばれていた部分は全てオープンソースの代替品で置換され、JDK全体がオープン化された[16]。
Javaクラスライブラリの他のフリーソフトウェア実装としては、GNU Classpath がある。他の実装とは異なり、これはクラスライブラリのみを実装しており、多くのフリーなJava実装(ランタイム)、Kaffe、SableVM、JamVM、CACAO などで使われている。
Apache Harmony もクラスライブラリのフリーソフトウェア実装だった。これにはJava仮想マシンとJavaコンパイラなども含まれており、Javaスタック全体をフリーソフトウェアで実装することを目的としていた。
未登録
IPFS未登録
📡 0ピア
N=1
CRITICAL
PQS B65