9

以前は、jar ファイルが 1 つしかなく、プログラムを次のように簡単に実行できるようにマニフェストが設定されていました。

 java -jar MyApp.jar

ここで、機能を 2 つの jar ファイル (MyCore.jar と MyApp.jar) に分けました。

次のコマンドが機能します。

java -cp "*" com.mycompany.mypackage.App

しかし、私は以下を機能させることができません

java -cp "*" -jar MyApp.jar

ClassNotFoundException が発生します。

「-jar」スイッチを使用することをお勧めします。それを機能させる方法はありますか?

4

4 に答える 4

11

Java cliドキュメントによると、同じコマンドで -cp と -jar を組み合わせることはできません。

-jar JAR アーカイブにカプセル化されたプログラムを実行します。最初の引数は、起動クラス名ではなく、JAR ファイルの名前です。このオプションが機能するには、JAR ファイルのマニフェストに Main-Class:classname という形式の行が含まれている必要があります。ここで、classname は、アプリケーションの開始点として機能する public static void main(String[] args) メソッドを持つクラスを識別します。Jar ファイルと Jar ファイル マニフェストの操作については、Jar ツールのリファレンス ページと Java チュートリアルの Jar Trail を参照してください。このオプションを使用すると、JAR ファイルがすべてのユーザー クラスのソースとなり、他のユーザー クラス パス設定は無視されます。「java -jar」オプションを使用して実行できる JAR ファイルには、実行権限を設定できるため、「」を使用せずに実行できます。

これを解決するには、アプリケーション jar 内のマニフェストが、メイン ファイルを含むクラスとクラスパスの両方を参照するようにする必要があります。

于 2012-08-21T02:43:38.080 に答える
6

このような Manifest.mf ファイルがあります。

Manifest-Version: 1.0
Main-Class: com.mycompany.mypackage.App
Class-Path: MyApp.jar MyCore.jar log4j.jar 

必要な jar ファイルを Class-Path 行に追加するだけです。次に、jar がクラスパスにある限り、-cp なしで java -jar コマンドを実行できます。

于 2012-08-21T02:43:31.820 に答える
5

両方の jar ファイルが同じフォルダーにcom.mycompany.mypackage.Appあり、メインのアプリケーション クラスであると仮定して、次のコマンドを試してください。

java -cp MyCore.jar;MyApp.jar com.mycompany.mypackage.App

それはあなたのために働くはずです。

-jarスイッチの使用を主張する場合(なぜ? )、マニフェスト ファイルを変更して、Class-Pathキーを追加し、関連するすべての jar ファイルへのパスを指定する必要があります。jar ファイルがメイン アプリの jar ファイルと一緒にパッケージ化されていない場合、アプリケーションの柔軟性が低下します。

于 2012-08-21T05:15:04.223 に答える
3

main()含むクラスとクラスパスの両方を指定するマニフェストを追加します。詳細については、マニフェスト ファイルの操作: JAR ファイルのクラスパスへのクラスの追加を参照してください。

次に、アプリ全体。-jarを必要とせずにを使用して起動できます-cp

于 2012-08-21T02:40:27.497 に答える