web-dev-qa-db-ja.com

Linuxでクラスパスを追加する

export CLASSPATH=.;../somejar.jar;../mysql-connector-Java-5.1.6-bin.jar
Java -Xmx500m folder.subfolder../dit1/some.xml
cd ..

linuxの既存のクラスパスにクラスパスを設定するための上記のステートメントは正しいかどうかです

12
xyz

CLASSPATHを設定したくない。 CLASSPATHはグローバル変数であり、それ自体が悪です。

  • 1つのスクリプトで変更すると、突然いくつかのJavaプログラムが動作しなくなります。
  • あなたがそこにあなたが実行するすべてのもののためのライブラリを置くと、それは雑然としてしまいます。
  • 2つの異なるアプリケーションが同じライブラリの異なるバージョンを使用すると、競合が発生します。
  • CLASSPATH内のライブラリは共有されないため、パフォーマンスは向上しません。それらの名前が共有されるだけです。
  • ドット(。)またはその他の相対パスをCLASSPATHに入れると、場所ごとに異なることを意味します-これは間違いなく混乱を招きます。

したがって、推奨される方法は、jvmの実行ごとにクラスパスを設定することです。次に例を示します。

Java -Xmx500m -cp ".:../somejar.jar:../mysql-connector-Java-5.1.6-bin.jar"    "folder.subfolder../dit1/some.xml

長くなる場合の標準的な手順は、入力を節約するためにbashまたはバッチスクリプトでラップすることです。

24
flybywire

正当な理由がない限り、既存のクラスパスを破壊的に破棄しないことを常にお勧めします。

次の行は、既存のクラスパスを保持し、それに追加します。

export CLASSPATH="$CLASSPATH:foo.jar:../bar.jar"
16
Yann Ramin

WindowsとLinuxでのクラスパスの設定の重要な違いは、パス区切り文字である「;」です。 (セミコロン)Windowsでは ":"(コロン)、Linuxでは。また、%PATH%はWindowsの既存のパス変数の値を表すために使用され、${PATH}はLinux(bashシェル内)で同じ目的で使用されます。 Linuxでクラスパスを設定する方法は次のとおりです。

export CLASSPATH=${CLASSPATH}:/new/path

しかし、そのようなクラスパスは非常にトリッキーであり、正しいクラスパスを設定した後でもプログラムが機能しない理由を疑問に思うかもしれません。注意事項:

  1. -cpオプションはCLASSPATH環境変数をオーバーライドします。
  2. マニフェストファイルで定義されたクラスパスは、-cpおよびCLASSPATH環境変数の両方をオーバーライドします。

参照: Javaでのクラスパスの動作

11
Chui

Linuxでのパスはコロン(:)、セミコロン(;)、theatrusが彼の例で正しく使用したため。 Javaはこの慣習を尊重します。

編集する

andy推奨 の代わりに、次の形式を使用することもできます(コマンドの実行中にCLASSPATHを設定します)。

CLASSPATH=".:../somejar.jar:../mysql-connector-Java-5.1.6-bin.jar" Java -Xmx500m ...

どちらか都合のよい方。

6
David Hanak