3

2つのメインクラスを含む実行可能jarファイルを作成しました。すべてのライブラリはjarに含まれており、メインのメインクラスは次のように実行すると正常に機能します。

java -jar MyApplication.jar

しかし、私がこのような他のメインクラスを実行しようとすると:

java -cp MyApplication.jar my.other.mainClass

マニフェスト.mfのクラスパスが含まれておらず、jarファイルにあるライブラリを見つけることができません。

他のメインクラスがmanifest.mfのクラスパスを使用できるようにする簡単な方法はありますか?または、2つの別々の実行可能jarを作成する必要がありますか?

4

3 に答える 3

2

Reflectionを使用して、最初の引数として渡されたクラスのmainメソッドを呼び出すクラスを作成し、これをjar内のMainクラスとして構成できます。このようにして、同じjarから複数のメインメソッドを呼び出すことができます。java -jar file.jar my.other.mainClass

于 2012-06-08T19:40:53.687 に答える
1

あなたの問題はjar内のライブラリにあると確信していますか?どのバージョンのJavaを使用していますか?

次のことを試してみることをお勧めします。

java -cp MyApplication.jar <add external libraries here> my.other.mainClass

したがって、まだjarに含まれていないクラスへのパスを追加するだけで済みます。ワイルドカードを使用してリストを短くすることができます。

もう1つの興味深いオプションは、実行不可能なJARをjava-jarコマンドで実行できるようにすることです。jarファイルでメインクラスを選択し、別の実行可能なコピーを作成する方法について説明します。

于 2012-06-08T19:36:03.860 に答える
1

他のメインクラスがmanifest.mfのクラスパスを使用できるようにする簡単な方法はありますか?または、2つの別々の実行可能jarを作成する必要がありますか?

JARマニフェストクラスパスは、オプションを使用する場合にのみ使用され-jar、逆に、コマンドライン引数は、使用されていない場合にのみクラス名として解釈さ-jarれます。2つのアプローチを混在させることはできません。

ただし、これは2番目のJARファイルを作成する必要があるという意味ではありません。たとえば、マニフェストからコピーされたクラスパスとセカンダリエントリポイントのクラス名を使用してJVMを起動する簡単なシェルスクリプトを作成できます。

于 2012-06-08T15:17:49.263 に答える