クラスパスとは何ですか?また、どのように設定しますか?質問する

クラスパスとは何ですか?また、どのように設定しますか?質問する

私はちょうどこの行を読んでいました:

format() メソッドが最初に行うことは、output.vm という名前のクラスパスから Velocity テンプレートをロードすることです。

この文脈でクラスパスが何を意味するのか、またクラスパスをどのように設定すればよいのかを説明してください。

ベストアンサー1

Java でプログラミングする場合、ソース ファイルの先頭に次のようなコードを追加することで、作成中のクラスで他のクラスを使用できるようになります。

import org.javaguy.coolframework.MyClass;

または、次のようにして「一括インポート」することもあります。

import org.javaguy.coolframework.*;

プログラムの後半で次のように記述します。

MyClass mine = new MyClass();

Java 仮想マシンは、コンパイルされたクラスの場所を認識します。

VM にマシン上のすべてのフォルダを調べさせるのは非現実的であるため、VM に調べる場所のリストを提供する必要があります。これは、フォルダと jar ファイルをクラスパスに配置することによって行われます。

クラスパスの設定方法について説明する前に、.class ファイル、パッケージ、.jar ファイルについて説明します。

まず、MyClass がプロジェクトの一部として作成したもので、プロジェクト内の というディレクトリにあるとしますoutput。.class ファイルは にありますoutput/org/javaguy/coolframework/MyClass.class(そのパッケージ内の他のすべてのファイルとともに)。そのファイルにアクセスするには、パスにパッケージ構造全体ではなく、フォルダー 'output' を含めるだけで済みます。これは、インポート ステートメントによって VM にすべての情報が提供されるためです。

ここで、CoolFramework を .jar ファイルにバンドルし、その CoolFramework.jar をプロジェクトの lib ディレクトリに配置するとします。次に、lib/CoolFramework.jarクラスパスに配置する必要があります。VM は jar ファイル内のorg/javaguy/coolframework部分を検索し、クラスを見つけます。

したがって、クラスパスには次のものが含まれます。

  • JARファイル、および
  • パッケージ階層の最上位へのパス。

クラスパスをどのように設定しますか?

誰もが最初に学ぶ方法は環境変数を使うことです。Unix マシンでは、次のように記述できます。

export CLASSPATH=/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/

Windows マシンでは、環境設定に移動して、既存の値を追加するか変更する必要があります。

2 番目の方法は、-cp次のように Java を起動するときにパラメータを使用することです。

java -cp "/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/"  MyMainClass

このバリエーションは 3 番目の方法で、クラスパスを計算してそれをパラメータ経由で Java に渡す.shまたはファイルを使用して実行されることが多いです。.bat-cp

上記のすべてに「落とし穴」があります。ほとんどのシステム (Linux、Mac OS、UNIX など) では、コロン文字 ( :) がクラスパスの区切り文字です。Windows では、区切り文字はセミコロン ( ;)です。

それで、それを実行する最善の方法は何でしょうか?

環境変数を介してグローバルに物事を設定するのは、一般的にグローバル変数がダメなのと同じ理由でダメです。CLASSPATHあるプログラムが動作するように環境変数を変更すると、別のプログラムが壊れてしまいます。

これ-cpが正しい方法です。私は通常、CLASSPATH開発時に環境変数が空の文字列であることを確認し、可能な限り、グローバル クラスパスの問題を回避するようにしています (ただし、一部のツールはグローバル クラスパスが空であるとうまく動作しません。私は、コマンドライン ツールでこの種の問題が発生する、ライセンスが数千ドルかかる一般的な J2EE および Java サーバーを 2 つ知っています)。

おすすめ記事