Java VMの起動方法には、概ね、次の方法があります。
- 環境変数PATHに設定されているパスからjavaコマンドを叩く
- 環境変数JAVA_HOMEに設定されているJDK/JREへのパスからjavaコマンドを叩くか、直接jvm.dllにアクセスする
- Windowsインストール先\SYSTEM32\java.exeを叩く (Windowsの場合)
- Windowsレジストリを参照して、java.exeを叩くか、直接jvm.dllにアクセスする
たとえば、Apache Antの場合はどうでしょうか?これはプラットフォーム非依存のJavaツールです。
AntはまずJAVA_HOMEを参照してJava VMを起動します。もしJAVA_HOMEが設定されていないか、不適切なパスが設定されている場合、環境変数PATHを参照してJava VMを起動します。
次に留意したいのはクラスパスの設定ですね。Javaアプリ/Javaツールがどのようにクラスパスを決定しているのかを理解する必要があります。クラスパスの設定方法はJavaアプリ/Javaツールによって異なります。
普通にjavaコマンドを叩いてJavaアプリ/Javaツールを起動する場合は、javaコマンドの-cpまたは-classpathオプションでクラスパスを指定するか、あるいは、環境変数CLASSPATHなどで指定するかを使いわける必要があります。-cpと-classpathオプションと環境変数CLASSPATHの相違点は、JDK ドキュメント(JDK Documentation)に説明があります。
独自の定義ファイル/設定ファイルでクラスパスを指定するJavaアプリ/Javaツールも結構あります。特に、
- Javaアプリ/Javaツール自体を起動するためのクラスパスと
- Javaアプリ/Javaツールを起動後さらに開発(コンパイル)/Javaプログラム起動を行うクラスパス
たとえばEclispeはプロジェクトごとに異なるクラスパスを設定します。またApache Antのjavaタスクやjavacタスクなどではタスクごとにクラスパスを設定します。
TomcatやGlassFishなどのJavaコンテナやアプリケーションサーバでは、特定ディレクトリに入れたjarファイルが「共有ライブラリ」とみなされ、クラスパスが通ったかのように(言い方が微妙ですが)、動作します。
このようにJava VMがどのように起動されるか、クラスパスがどのように起動されるかを、説明書(readmeなど)で確認し、整理しておきましょう。これが整理できていないと、1つのマシン上で複数のJavaアプリ/Javaツールを上手に起動させることができなくなります。
0 件のコメント:
コメントを投稿