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

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

4

5 に答える 5

27

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 またはバッチ スクリプトでラップすることです。

于 2009-02-24T08:20:11.880 に答える
18

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

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

export CLASSPATH="$CLASSPATH:foo.jar:../bar.jar"
于 2009-02-24T08:09:25.963 に答える
15

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

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

しかし、そのようなクラスパスは非常に扱いにくく、正しいクラスパスを設定した後でもプログラムが機能しないのはなぜだろうと思うかもしれません。注意事項:

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

参照: Java でクラスパスがどのように機能するか

于 2011-12-01T09:19:40.420 に答える
6

Linuxでのパスは、セミコロン(:)ではなくコロン( )で区切ら;れています。これは、theatrusが彼の例で正しく使用したためです。Javaはこの規則を尊重していると思います。

編集

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

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

どちらか便利な方。

于 2009-02-24T08:11:39.327 に答える