私はちょうどこの行を読んでいました:
Format()メソッドが最初に行うことは、output.vmという名前のクラスパスからVelocityテンプレートをロードすることです。
この文脈でクラスパスとは何を意味していたのか、そしてどのようにクラスパスを設定するのかを説明してください。
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
部分を探し、クラスを見つけます。
つまり、クラスパスには以下が含まれます。
クラスパスをどのように設定しますか?
みんなが学ぶように見える最初の方法は環境変数を使うことです。 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サーバー。
PATH環境変数に対するJavaの答えと考えてください。OSはPATH上でEXEを検索し、Javaはクラスパス上のクラスとパッケージを検索します。
クラスパスは、Java仮想マシンがJavaプログラム内のユーザー定義クラス、パッケージ、およびリソースを探す場所のパスです。
このコンテキストでは、format()
メソッドはこのパスからテンプレートファイルをロードします。
このコンテキストのクラスパスは、一般的なコンテキストとまったく同じです。VMがロードするクラスを見つけることができることがわかっている場所であれば、リソース(あなたの場合はoutput.vmなど)も同じです。
私はVelocityが "no package"のどこかにoutput.vmという名前のファイルを見つけることを期待していることを理解しています。これはJAR、通常のフォルダなどです。アプリケーションのクラスパス内の任意の場所のルートです。
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
クラスパスはシステムの環境変数です。この変数の設定は、パッケージ階層のルートをJavaコンパイラに提供するために使用されます。
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
Environment variable
は、オペレーティングシステム(OS)の下で実行されているすべてのプロセスによってアクセス可能なグローバルシステム変数です。
Javaのclasspath
は、ClassLoader
によるクラスロード中に、Java仮想マシンがクラスファイル(environment variable
)を検索または検索するために使用する.class
です。
Javaコンパイラ(javac
)、Javaランタイム(Java
)、およびその他のJavaツールは、プログラムで使用されているクラスをこの順序で検索します。
ユーザクラス検索パス(要するにclasspath
):以下の順序で決定します。
a。デフォルトはcurrent working directory (.)
です。
b。デフォルトをオーバーライドするclasspath
environment 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
クラスの静的メンバーは、オブジェクトインスタンスを作成せずに直接呼び出すことができます。 mainメソッドは静的なので、Java仮想マシンはmainメソッドを含むクラスのインスタンスを作成せずに呼び出すことができます。これはプログラムの開始点です。