1. ホーム
  2. java

[解決済み] クラスパスとは何ですか、どのように設定するのですか?

2022-03-22 22:46:27

質問

この行を読んでいたところです。

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

この場合のクラスパスの意味と、クラスパスをどのように設定すればよいかを説明してください。

どのように解決するのですか?

Javaでプログラミングする場合、ソースファイルの先頭に以下のような記述をすることで、自分が書いているクラスから他のクラスを利用できるようにします。

import org.javaguy.coolframework.MyClass;

と言って物を「一括インポート」することもあります。

import org.javaguy.coolframework.*;

だから、プログラムの後半で、あなたが言うとき。

MyClass mine = new MyClass();

Java仮想マシンは、コンパイルされたクラスがどこにあるかを知ることができます。

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

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

まず、MyClass がプロジェクトの一部としてビルドしたもので、プロジェクト内の output . .classファイルは、以下の場所にあります。 output/org/javaguy/coolframework/MyClass.class (そのパッケージの他のすべてのファイルと一緒に)。そのファイルを取得するためには、パッケージ構造全体ではなく、単に「output」フォルダをパスに含める必要があります。

さて、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つ目の方法で、これはしばしば .sh または .bat ファイルで、クラスパスを計算し、それを -cp パラメータで指定します。

上記のすべてについて、"gotcha"があります。 ほとんどのシステム(Linux、Mac OS、UNIXなど)では、コロン文字(':')がクラスパスのセパレータになります。 Windowsm では、セパレータはセミコロン (';') です。

では、どうするのが一番いいのでしょうか?

環境変数でグローバルに何かを設定することは、一般的にグローバル変数が悪いのと同じような理由で、悪いことです。環境変数で CLASSPATH あるプログラムが動くように環境変数を設定すると、別のプログラムを壊してしまうことになります。

その -cp が、その方法です。私は一般的に CLASSPATH 環境変数は、可能な限り、私が開発する場所で空の文字列であり、グローバルなクラスパスの問題を避けることができます(一部のツールは、グローバルなクラスパスが空であると満足しませんが、私は、コマンドラインツールでこの種の問題がある2つの共通の、数千ドルライセンスJ2EEとJavaサーバーを知っています)。