web-dev-qa-db-ja.com

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

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

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

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

282
Blankman

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'を含む必要があるでしょう。あなたのimportステートメントは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番目の方法は、次のように、Javaを起動するときに-cpパラメータを使用することです。

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

この変種は、クラスパスを計算し、それを.shパラメーターを介してJavaに渡す.batまたは-cpファイルを使用して行われることが多い3番目の方法です。

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

それでそれをするための最良の方法は何ですか?

環境変数を使ってグローバルにものを設定するのは良くありません。大体グローバル変数が悪いというのと同じ理由でです。あるプログラムが動作するようにCLASSPATH環境変数を変更すると、別のプログラムが壊れてしまいます。

-cpはその道です。私は一般的に私のCLASSPATH環境変数は私がグローバルクラスパスの問題を避けるために私ができる限り開発するところで空の文字列であることを確認します。コマンドラインツールにこの種の問題があるドルライセンスのJ2EEおよびJavaサーバー。

457
bokmann

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

54
user257111

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

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

10
Desintegr

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

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

5
Romain

CLASSPATHシステム変数の設定

現在のCLASSPATH変数を表示するには、WindowsおよびUNIX(Bourneシェル)でこれらのコマンドを使用します。Windowsの場合:C:\> set CLASSPATH UNIXの場合:% echo $CLASSPATH

CLASSPATH変数の現在の内容を削除するには、次のコマンドを使用します。Windowsの場合:C:\> set CLASSPATH= UNIXの場合:% unset CLASSPATH; export CLASSPATH

CLASSPATH変数を設定するには、(例えば)次のコマンドを使用します。Windowsの場合:C:\> set CLASSPATH=C:\users\george\Java\classes UNIXの場合:% CLASSPATH=/home/george/Java/classes; export CLASSPATH

2
lft93ryt

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

1
Bimalendu nath

CLASSPATHは、Javaプログラムで使用されるJavaパッケージを見つけるためにJavaコンパイラおよびランタイムに必要とされる環境変数(すなわち、すべてのプロセスに利用可能なオペレーティングシステムのグローバル変数)である。 (PACKAGEPATHを呼び出さないのはなぜですか?)これは、実行可能プログラムを見つけるためにCMDシェルによって使用される別の環境変数PATHと似ています。

CLASSPATHは、次のいずれかの方法で設定できます。

CLASSPATH can be set permanently in the environment: In Windows, choose control panel ⇒ System ⇒ Advanced ⇒ Environment Variables ⇒ choose "System Variables" (for all the users) or "User Variables" (only the currently login user) ⇒ choose "Edit" (if CLASSPATH already exists) or "New" ⇒ Enter "CLASSPATH" as the variable name ⇒ Enter the required directories and JAR files (separated by semicolons) as the value (e.g., ".;c:\javaproject\classes;d:\Tomcat\lib\servlet-api.jar"). Take note that you need to include the current working directory (denoted by '.') in the CLASSPATH.

To check the current setting of the CLASSPATH, issue the following command:

> SET CLASSPATH

CLASSPATH can be set temporarily for that particular CMD Shell session by issuing the following command:

> SET CLASSPATH=.;c:\javaproject\classes;d:\Tomcat\lib\servlet-api.jar

Instead of using the CLASSPATH environment variable, you can also use the command-line option -classpath or -cp of the javac and Java commands, for example,

> Java –classpath c:\javaproject\classes com.abc.project1.subproject2.MyClass3
0
Unnati Solanki

Environment variableは、オペレーティングシステム(OS)の下で実行されているすべてのプロセスによってアクセス可能なグローバルシステム変数です。

Javaのclasspathは、ClassLoaderによるクラスロード中に、Java仮想マシンがクラスファイル(environment variable)を検索または検索するために使用する.classです。

Javaコンパイラ(javac)、Javaランタイム(Java)、およびその他のJavaツールは、プログラムで使用されているクラスをこの順序で検索します。

  1. Javaプラットフォーム(ブートストラップ)クラス
  2. Java拡張ディレクトリ
  3. ユーザクラス検索パス(要するにclasspath):以下の順序で決定します。

    a。デフォルトはcurrent working directory (.)です。

    b。デフォルトをオーバーライドするclasspathenvironment variable内のエントリー。

    c。 -cp(または-classpath)コマンドラインオプションのエントリ。環境変数classpathより優先されます。

    d。実行時コマンドラインオプション-jarは、上記すべてをオーバーライドします。

classpath環境変数には、ディレクトリ(多数のクラスファイルを含む)およびJARファイル(クラスファイルの単一ファイルアーカイブ)を含めることができます。 classpathが設定されていない場合、デフォルトはcurrent directoryになります。 classpathを設定する場合、current working directory (.)を含めることが重要です。それ以外の場合、現在のディレクトリは検索されません。

Javaプログラムの実行中にオプションenvironment variableまたは-cpを提供することによって-classpathによって定義されるJavaでclasspathをオーバーライドすることができます。これは、同じUnixまたはWindowsマシン上で実行されるJavaアプリケーションごとに異なるclasspathを持つための最良の方法です。

Java -cp "<path/1><separator><path/2>" <path.to.your.MainClass>

区切り文字はセミコロン; - Windows、コロン: - Linux

MacOS用のコマンドの例

Java -cp "Test.jar:lib/*" my.package.MainClass

もっと読む こちら そして こちら

0
yoAlex5

クラスの静的メンバーは、オブジェクトインスタンスを作成せずに直接呼び出すことができます。 mainメソッドは静的なので、Java仮想マシンはmainメソッドを含むクラスのインスタンスを作成せずに呼び出すことができます。これはプログラムの開始点です。

0
Sumanth Ydt