web-dev-qa-db-ja.com

クラスパスでワイルドカードを使用して複数のjarを追加する方法は?

使用しているすべてのjarファイルのパスを含める必要があるため、CLASSPATHが完全に台無しになるほど多くのサードパーティライブラリ(jarファイル)を使用しています。

Wildcard(*)演算子(* .jarなど)を使用して、フォルダーにすべてのjarファイルを含める方法があるかどうか疑問に思っていました。しかし、機能していないようです。私のPCで現在エッセイのように見えるCLASSPATHを短縮できる他の方法はありますか?.

94
paulbullard

From: http://Java.Sun.com/javase/6/docs/technotes/tools/windows/classpath.html

クラスパスエントリには、ベース名ワイルドカード文字*を含めることができます。これは、ディレクトリ内のすべてのファイルのリストを拡張子.jarまたは.JARで指定するのと同等と見なされます。たとえば、クラスパスエントリfoo/*は、fooという名前のディレクトリ内のすべてのJARファイルを指定します。 *のみで構成されるクラスパスエントリは、現在のディレクトリ内のすべてのjarファイルのリストに展開されます。

これはJava6で動作するはずで、Java5についてはわかりません

(期待どおりに動作しないと思われる場合は、引用符を付けてみてください。例:"foo/*"

93
Itay Maman

これはWindows上で動作します:

Java -cp "lib/*" %MAINCLASS%

どこ %MAINCLASS%もちろん、メインメソッドを含むクラスです。

代わりに:

Java -cp "lib/*" -jar %MAINJAR%

どこ %MAINJAR%は、内部マニフェストを介して起動するjarファイルです。

23
Chris Milburn

ベースネームのワイルドカードはJava 6;で導入されました。つまり、「foo/*」は「foo」ディレクトリ内のすべての「.jar」ファイルを意味します。

ワイルドカードクラスパスをサポートしていないJavaの以前のバージョンでは、シェルラッパースクリプトを使用して、パターンを「グロブ」し、結果をマングルして「:」文字を挿入することでクラスパスを組み立てました。 BATファイルでこれを行うのは難しいでしょう...

6
Stephen C

CLASSPATHという名前の環境変数があることを意味する場合、それはあなたの間違いだと思います。私がJavaを開発するマシンにはそのようなものはありません。 CLASSPATHは特定のプロジェクトと密接に結びついているため、すべてで機能する単一の正しいCLASSPATHを持つことは不可能です。

IDEまたはAntを使用して各プロジェクトのCLASSPATHを設定します。多くのWeb開発を行うため、各WARおよびEARは独自のCLASSPATHを使用します。

IDEおよびアプリサーバーでは無視されます。なぜあなたはそれを持っていますか?削除することをお勧めします。

0
duffymo