回答:
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
を調べて、クラスを見つけます。
したがって、クラスパスには次のものが含まれます。
クラスパスをどのように設定しますか?
誰もが最初に学ぶ方法は、環境変数です。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
これの変形は、クラスパスを計算し、それをパラメーターを介してJavaに渡す.sh
または.bat
ファイルでよく行われる3番目の方法-cp
です。
上記のすべての「落とし穴」があります。ほとんどのシステム(Linux、Mac OS、UNIXなど)では、コロン文字( ':')がクラスパス区切り文字です。windowsmでは、セパレーターはセミコロン( ';')です。
それを行うための最良の方法は何ですか?
環境変数を介してグローバルに設定することは、一般的にグローバル変数が悪いのと同じ種類の理由で悪いです。1つのプログラムが機能するようにCLASSPATH環境変数を変更し、別のプログラムを破壊することになります。
-cpを使用する方法です。私は通常、CLASSPATH環境変数が空の文字列であることを確認して、可能な場合は常に開発することで、グローバルクラスパスの問題を回避しています(ただし、一部のツールは、グローバルクラスパスが空の場合に満足できません-何千もの一般的なコマンドラインツールにこの種の問題があるドルライセンスのJ2EEおよびJavaサーバー)。
org.javaguy.coolfw
、対応するディレクトリ構造がある/path/to/org/javaguy/coolfw/
場合、クラスパスに含める必要があります/path/to/
。org.javaguy.hotfw
同じプロジェクトに新しいパッケージを追加すると、結果のクラスは(通常)になります/path/to/org/javaguy/hotfw/
。これには、クラスパスにが含まれている必要/path/to/
があります。そのため、新しいパッケージ(およびそこに含まれるクラス)では、クラスパスに新しい追加を必要としません。
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
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
クラスの静的メンバーは、オブジェクトインスタンスを作成せずに直接呼び出すことができます。mainメソッドは静的なので、Java仮想マシンは、プログラムの開始点であるmainメソッドを含むクラスのインスタンスを作成せずにそれを呼び出すことができます。
Linuxユーザーの場合、およびここで他の人が言ったことを要約して追加するには、次のことを知っている必要があります。
$ CLASSPATHは、Javaが複数のディレクトリを調べて、スクリプトに必要なすべての異なるクラスを見つけるために使用するものです(-cpオーバーライドで明示的に指定しない限り)。-cpを使用するには、すべてのディレクトリを手動で追跡し、プログラムを実行するたびにその行をコピーして貼り付ける必要があります(推奨されるIMOではありません)。
コロン( ":")文字は、さまざまなディレクトリを区切ります。$ CLASSPATHは1つだけあり、その中にすべてのディレクトリがあります。したがって、 "export CLASSPATH = ...."を実行するときは、現在の値 "$ CLASSPATH"を追加して追加する必要があります。例えば:
export CLASSPATH=.
export CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-5.1.12.jar
上記の最初の行では、現在の作業ディレクトリへのパスである単純な「ドット」だけでCLASSPATHを開始します。これにより、Javaを実行するたびに、現在の作業ディレクトリ(現在の作業ディレクトリ)でクラスが検索されます。上記の2行目の$ CLASSPATHは、以前に入力した値(。)を取得し、mysql dirverにパスを追加します。これで、javaはドライバーとクラスを探します。
echo $CLASSPATH
非常に便利です。返されるものは、コロンで区切られたすべてのディレクトリのリスト、および.jarファイルのように読み取る必要があります。
TomcatはCLASSPATHを使用しません。ここで何をすべきかを読んでください:https: //tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html