クラスパスとは? わかりやすく解説

クラスパス

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/11/12 03:54 UTC 版)

クラスパスは、Java仮想マシンJavaコンパイラにユーザーが定義した、コマンドライン上と環境変数を通じて設定される、クラスパッケージを見付けるための場所を示す引数である。

概要とアーキテクチャ

伝統的に有名な動的読み込みに似て、Javaプログラムを実行する場合、Java仮想マシンはゆっくりとクラスを見付けロードする(Java仮想マシンは、クラスが最初に使用される場合のみクラスのバイトコードをロードする)。クラスパスは、これらのクラスを定義するファイルのためのファイルシステムがどこにあるかを探すように、Javaを指示する。

仮想マシンは以下の順序でクラスを検索しロードする :

  1. ブートストラップクラス : Javaプラットフォームにおける(Javaクラスライブラリのパブリックなクラスと、このライブラリに対して機能上必要なプライベートなクラスを構成する)基礎的なクラス。
  2. 拡張クラス : JREJDKの、jre/lib/ext/拡張ディレクトリ内にあるJavaパッケージ
  3. ユーザ定義パッケージやライブラリ。

デフォルトではJDK標準APIと拡張パッケージのみが場所を指定する必要がなくアクセス可能である。全てのユーザーが定義したパッケージとライブラリは、コマンドラインで(またはクラスを含むJarファイルに関連付けられたマニフェストファイル内に)設定しなければならない。


Javaプログラムを実行するためのパスの設定

参考:[1]

基本的な使用法

クラスを含んだorg.mypackageと呼ばれるパッケージがあると仮定しよう。

  • HelloWorld(メインクラス)
  • SupportClass
  • UtilClass

そしてこのパッケージを定義するファイルは、D:\myprogramWindows上)や/home/user/myprogramLinux上)といったディレクトリ配下に物理的に保存される。

ファイル構造は以下のようである。

Microsoft Windows Linux
D:\myprogram\
      |
      ---> org\  
            |
            ---> mypackage\
                     |
                     ---> HelloWorld.class       
                     ---> SupportClass.class   
                     ---> UtilClass.class     
/home/user/myprogram/
            |
            ---> org/  
                  |
                  ---> mypackage/
                           |
                           ---> HelloWorld.class       
                           ---> SupportClass.class   
                           ---> UtilClass.class     

Javaを呼び出す場合、起動するアプリケーションの名前を指定する : org.mypackage.HelloWorld。しかしながら、Javaに、どこにファイルとディレクトリがあるかを探すように示さねばならない。それを行うため、以下のコマンドを使用する。

Windows Linux
 java -classpath D:\myprogram org.mypackage.HelloWorld
 java -classpath /home/user/myprogram org.mypackage.HelloWorld 

場所 :

  • -classpath D:\myprogramは、プログラムで使用されるパッケージにパスを設定する(Linuxでは、-classpath /home/user/myprogram
  • org.mypackage.HelloWorldはメインクラスの名前である。

D:\myprogram\でJavaを起動する場合、Javaはクラスを含むファイルに対しカレントワーキングディレクトリクラスパスを指定する必要がないことに注意すること。


ディレクトリ内の全てのJARファイルの追加

Java 6以降において、ワイルドカード表記を用いることで、一つで指定されたディレクトリ内の全てのjarファイルを追加することができる。

Windowsの例 :

java -classpath ".;c:\mylib\*" MyApp

Linuxの例 :

java -classpath '.:/mylib/*' MyApp

環境変数を通じたパスの設定

CLASSPATHと名付けられた環境変数を、代わりにクラスパスの設定に使用することができる。上記の例で、Windowsでは以下も使える。

正式なJDKバージョンを指示している場合、JAVA_HOMEもチェックしなければならない場合もある。

set CLASSPATH=D:\myprogram
java org.mypackage.HelloWorld

Jarファイルのパス設定

今、プログラムがサポートする、supportLib.jarと呼ばれる、物理的にディレクトリD:\myprogram\lib\に置かれたJarファイルで囲まれたライブラリを使用していることを考えよう。

当てはまる物理ファイル構造は以下である。

D:\myprogram\
      |
      ---> lib\
            |
            ---> supportLib.jar
      |
      ---> org\
            |
            --> mypackage\
                       |
                       ---> HelloWorld.class
                       ---> SupportClass.class
                       ---> UtilClass.class

以下のコマンドラインオプションを使用すべきである。

java -classpath D:\myprogram;D:\myprogram\lib\supportLib.jar org.mypackage.HelloWorld

または代わりとして

set CLASSPATH=D:\myprogram;D:\myprogram\lib\supportLib.jar
java org.mypackage.HelloWorld

マニフェストファイル内のパス設定

プログラムがサポートする、helloWorld.jarと呼ばれる、物理的にディレクトリD:\myprogram\に置かれたJarファイルで囲まれたライブラリを使用していることを考えよう、ファイル構造は以下である

D:\myprogram\
      |
      ---> helloWorld.jar 
      |
      ---> lib\  
            |
            ---> supportLib.jar

このJarファイルで定義されたマニフェストファイルは以下の定義を持つ 。

Main-Class: org.mypackage.HelloWorld
Class-Path: lib/supportLib.jar

注意 : マニフェストファイルの終わりは新しい行かキャリッジリターンであることが重要である。

また、この場合のクラスパス文字列は、helloWorld.jarの位置に関連したsupportLib.jarファイルの場所を述べており、絶対ファイルパスではない(それは例えばコマンドラインの-classpath引数で設定することもある)ことに注意すること。このため、実際のJarファイルの場所とそのサポートライブラリは二者間で保持される相対ディレクトリ構造と同じくらい無関係である。

このプログラムを起動するため、以下のコマンドを使用する :

java -jar D:\myprogram\helloWorld.jar

クラスパスがマニフェストファイルに既に定義されているため、プログラムクラスやサポートライブラリクラスへのクラスパスは定義する必要はない。

注意することは、起動するメインクラスを定義するためには役に立たず、Jarファイルのマニフェストは形式の行を含まなければならないことである。

Main-Class: classname

-jarオプションはJavaDocの処理をするためである。

マニフェストファイル内の、複数のライブラリJarファイルを指定するための文法は、空白によりエントリを分割する :

Class-Path: lib/supportLib.jar lib/supportLib2.jar

OS特有の注意

ファイルシステムへと密接に関連付けられているため、コマンドライン引数のクラスパスのシンタックスはオペレーティングシステム (OS) に依存する。例えば:

  • LinuxmacOSのような)全てのUnix系オペレーティングシステムにおいては、ディレクトリ構造はUnixシンタックスであり、コロン (":") によりファイルパスは分割される。
  • Windowsにおいては、ディレクトリ構造はWindowsシンタックスであり、各ファイルパスはセミコロン (";") で分割されなければならない。

これはクラスパスがマニフェストファイルに定義された場合には適用されない。オペレーティングシステムによらず、空白(" ")で各ファイルパスを分割しなければならない。

診断

アプリケーションプログラマは、アプリケーションの起動中、現在の設定を以下の方法で見付けたりデバッグすることができる :

System.getProperty("java.class.path")

JavaDoc

脚注

外部リンク


クラスパス

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/24 15:35 UTC 版)

Javaに対する批判」の記事における「クラスパス」の解説

Javaプログラム実行する際、すべてのサードパーティーライブラリはクラスパスに存在する必要がある。これは移植性障壁となる。なぜならばクラスパスの文法プラットフォーム依存するからである。例えWindowsベースシステムサブディレクトリ区切るためにバックスラッシュ "\" を使用しパス区切りセミコロン ";" を使用している。だが一方、他の多くプラットフォームではサブディレクトリ区切りスラッシュ "/" を使用しパス区切りコロン ":" を使用している。 各々.jar.zipアーカイブはクラスパスにおいて明示的に名前がつけられる必要がある。この抜け道としてアスタリスク(*)で終わるクラスパスを指定することで、そのディレクトリにある.jar.JARで終わるすべてのファイル名マッチさせることができる。しかしながら.zip.classファイルのようなものはマッチしない

※この「クラスパス」の解説は、「Javaに対する批判」の解説の一部です。
「クラスパス」を含む「Javaに対する批判」の記事については、「Javaに対する批判」の概要を参照ください。

ウィキペディア小見出し辞書の「クラスパス」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「クラスパス」の関連用語

クラスパスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



クラスパスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのクラスパス (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのJavaに対する批判 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS