web-dev-qa-db-ja.com

コンパイル時にJARファイルをワイルドカードに含める方法

Javaファイル(MyRtmpClient.Java)には次のものがあります。

import org.Apache.mina.common.ByteBuffer;

ByteBufferはJARファイル内にあります(もちろん、適切なディレクトリ構造を備えています)。そのjarファイルとその他の必要なファイルは、.Javaファイルと同じディレクトリにあります。

次に、次の行を使用してコンパイルします。

javac -cp ".;*.jar" MyRtmpClient.Java

しかし、私はエラーを受け取ります:

MyRtmpClient.Java:3: package org.Apache.mina.common does not exist
import org.Apache.mina.common.ByteBuffer;

プロジェクトにjarファイルを含めるにはどうすればよいですか?

45
javanewbie

コマンドラインは正しいが、いくつかの考慮事項があります。

  • javac> = 1.6が必要です。これは、コンパイラがそのバージョンでのみ「*」をさまざまなJARファイルとして解析するためです。
  • 「;」のため、Windowsを実行している必要があります。は、そのオペレーティングシステムのみのパス区切り文字です(Unixでは機能しません。UNIXのパス区切り文字は「:」です)。

あなたが述べたように、JARファイルは適切なディレクトリ構造を持っていると仮定しています。

26
cd1

javacは、クラスパス引数の* .jarを理解しません。各jarを明示的に指定する必要があります。例えば.

javac -cp ".;mina.jar" MyRtmpClient.Java
16
Mark

Javac JDK 6以降では、(。jarがないことに注意してください):

javac -cp ".;*" MyRtmpClient.Java

引用する javac-Javaプログラミング言語コンパイラ

特別な便宜として、*のベース名を含むクラスパス要素は、ディレクトリ内のすべてのファイルのリストを拡張子.jarまたは.JARで指定することと同等と見なされます。

たとえば、ディレクトリfooにa.jarとb.JARが含まれている場合、jarファイルの順序が指定されていないことを除き、クラスパス要素foo/*はA.jar; b.JARに展開されます。指定されたディレクトリ内のすべてのjarファイルは、隠しファイルも含め、リストに含まれます。単に*で構成されるクラスパスエントリは、現在のディレクトリ内のすべてのjarファイルのリストに展開されます。

9
Maciej Matys

あなたの場合、JAVACはjarファイルを見つけることができないと思います。

してみてください:

PROJECT_PATH
-lib\a.jar
-src\package\b.Java

cd @PROJECT_PATH

javac -classpath lib\a.jar src\package\b.Java
8
thanhduyspkt

ユーティリティfindおよびtrを自由に使用できる場合(たとえば、Linuxを使用している場合)、次のようにすることができます。

javac -cp .:`find * -name "*.jar" | tr "\n" ":"` MyRtmpClient.Java

現在のディレクトリとそのすべてのサブディレクトリにあるすべてのjarファイルが追加されます(シェルコマンドはすべてのjarファイルし、コロンをセパレータとして区切ります)。


  • バックティックのペア(`)は、実行されるシェルコマンドを示します。
  • find * -name "*.jar"は、ルートが現在のフォルダーである階層内のすべてのjarファイルを検索してリストします。
  • 垂直バー()はパイプです。 findの出力を次のコマンドの入力に接続します。
  • tr "\n" ":"は、すべてのnewline文字をcolon文字に置き換えます。
7
plesiv

おそらく以下の構文はWindowsのDOSコマンドで動作します

javac -cp ".;first.jar;second.jar;third.jar" MyRtmpClient.Java
4
shashank

Java 8、上記のオプション "。; *"などは機能しないようです。私は試してみました:javac -cp '<location of jars>/*' MyRtmpClient.Java

動作:

<location of jar>には/ usr/local/classes/*または/ home/developer/MyProject/*を指定できます

1
Ankush