412

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

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

このコンテキストでのクラスパスの意味と、クラスパスを設定する方法を説明してください。

4

10 に答える 10

682

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(そのパッケージ内の他のすべてのファイルと共に) にあります。そのファイルに到達するには、パッケージ構造全体ではなく、パスに「出力」フォルダーが含まれている必要があります。これは、インポート ステートメントがすべての情報を 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 など) では、コロン文字 (':') がクラスパスの区切り文字です。windowsm では、セパレーターはセミコロン (';') です。

それで、それを行う最良の方法は何ですか?

一般に、グローバル変数が悪いのと同じ種類の理由で、環境変数を介してグローバルに設定することは悪いことです。あるプログラムが機能するように環境変数を変更するCLASSPATHと、別のプログラムが壊れてしまいます。

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

于 2010-03-07T15:27:57.117 に答える
93

PATH 環境変数に対する Java の答えと考えてください。OS は PATH で EXE を検索し、Java はクラスパスでクラスとパッケージを検索します。

于 2010-03-07T14:10:42.233 に答える
17

クラスパスは、Java 仮想マシンが Java プログラムでユーザー定義のクラス、パッケージ、およびリソースを探すパスです。

このコンテキストでは、format()メソッドはこのパスからテンプレート ファイルを読み込みます。

于 2010-03-07T14:08:49.230 に答える
5

このコンテキストのクラスパスは、一般的なコンテキストとまったく同じです。VM が認識している場所ならどこでも、ロードするクラスとリソース (この場合は output.vm など) を見つけることができます。

Velocity は、output.vm という名前のファイルが「パッケージなし」のどこかにあることを期待していることを理解しています。これは、JAR、通常のフォルダーなどにすることができます... アプリケーションのクラスパス内の任意の場所のルート。

于 2010-03-07T14:08:42.633 に答える
2

クラスパスはシステムの環境変数です。この変数の設定は、パッケージ階層のルートを Java コンパイラに提供するために使用されます。

于 2014-12-15T14:20:39.453 に答える