[解決済み] クラスパスとは何ですか、どのように設定するのですか?
質問
この行を読んでいたところです。
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サーバーを知っています)。
関連
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
javaでクラスを作成すると、enclosing classでないように見える
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み】サーブレットはどのように動作するのですか?インスタンス化、セッション、共有変数とマルチスレッド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
javaで非静的な解を静的な参照にすることができない
-
プロローグでのコンテンツは禁止されています
-
サーブレットクラスのインスタンス化エラーの解決法
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
java 例外。Javaツールの初期化
-
IDEA パッケージステートメントの欠落
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について