Loading AI tools
Javaプログラムのコマンドラインの引数 ウィキペディアから
クラスパスは、Java仮想マシンやJavaコンパイラにユーザーが定義した、コマンドライン上と環境変数を通じて設定される、クラスとパッケージを見付けるための場所を示す引数である。
この項目「クラスパス」は翻訳されたばかりのものです。不自然あるいは曖昧な表現などが含まれる可能性があり、このままでは読みづらいかもしれません。(原文:en:Classpath (Java) 18:26, 21 June 2013 UTC) 修正、加筆に協力し、現在の表現をより自然な表現にして下さる方を求めています。ノートページや履歴も参照してください。(2013年8月) |
伝統的に有名な動的読み込みに似て、Javaプログラムを実行する場合、Java仮想マシンはゆっくりとクラスを見付けロードする(Java仮想マシンは、クラスが最初に使用される場合のみクラスのバイトコードをロードする)。クラスパスは、これらのクラスを定義するファイルのためのファイルシステムがどこにあるかを探すように、Javaを指示する。
仮想マシンは以下の順序でクラスを検索しロードする :
デフォルトではJDK標準APIと拡張パッケージのみが場所を指定する必要がなくアクセス可能である。全てのユーザーが定義したパッケージとライブラリは、コマンドラインで(またはクラスを含むJarファイルに関連付けられたマニフェストファイル内に)設定しなければならない。
参考:[1]
クラスを含んだorg.mypackageと呼ばれるパッケージがあると仮定しよう。
そしてこのパッケージを定義するファイルは、D:\myprogram(Windows上)や/home/user/myprogram(Linux上)といったディレクトリ配下に物理的に保存される。
ファイル構造は以下のようである。
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に、どこにファイルとディレクトリがあるかを探すように示さねばならない。それを行うため、以下のコマンドを使用する。
場所 :
D:\myprogram\でJavaを起動する場合、Javaはクラスを含むファイルに対しカレントワーキングディレクトリクラスパスを指定する必要がないことに注意すること。
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
今、プログラムがサポートする、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) に依存する。例えば:
これはクラスパスがマニフェストファイルに定義された場合には適用されない。オペレーティングシステムによらず、空白(" ")で各ファイルパスを分割しなければならない。
アプリケーションプログラマは、アプリケーションの起動中、現在の設定を以下の方法で見付けたりデバッグすることができる :
System.getProperty("java.class.path")
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.