135

JARファイルをコンパイルし、マニフェストで Main-Class を指定しました (Eclipse のエクスポート機能を使用しました)。私の依存関係はすべて、というラベルの付いたディレクトリにありlibます。lib/*JARファイルをクラスパスとして使用するように指定しながら、JARファイルを実行する方法について、率直な答えが得られないようです。

私はもう試した:

]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main

等...

それぞれが次のようなエラーを出します:

Error: Could not find or load main class ....

またはNoClassDefFoundError、ライブラリが見つからないことを示します。

JARファイルを作り直して、libディレクトリと内容を含めてみましたが、それでもダイスはありません...

コマンドラインから JAR ファイルを実行し、使用するクラスパスを指定するにはどうすればよいですか?

4

5 に答える 5

234

指定する-jarと、-cpパラメータは無視されます。

ドキュメントから:

このオプションを使用すると、JAR ファイルがすべてのユーザー クラスのソースになり、他のユーザー クラス パス設定は無視されます。

また、必要な jar ファイルを別の jar ファイルに「含める」こともできません (内容を抽出して .class ファイルを jar ファイルに入れる必要があります)。

次の 2 つのオプションがあります。

  1. ディレクトリのすべての jar ファイルをlibマニフェストに含めます (相対パスを使用できます)。
  2. 以下を使用して、コマンドラインですべて ( jarを含む-cp) を指定します。
    java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main
于 2013-08-23T22:54:28.643 に答える
43

jar ファイルを実行し、次のようにクラス パスを指定します。

java -cp <jar_name.jar:libs/*> com.test.App

jar_name.jar実行する JAR の完全な名前です。

libs/*依存関係 JAR へのパスです

com.test.Appmain(String[])メソッドを持つ JAR のクラスの完全修飾名です。

jar と依存 jar には実行権限が必要です。

于 2016-04-01T20:27:00.070 に答える
6

または、必要に応じてマニフェストを使用して class-path と main-class を-cp指定すると、メイン クラスを使用または指定する必要がなくなります。あなたの場合、次のような行が含まれます。

Main-Class: com.test.App
Class-Path: lib/one.jar lib/two.jar

残念ながら、マニフェスト内の各 jar のスペルを指定する必要があります (一度だけ行うので大したことではなく、スクリプトを使用してファイルをビルドするか、ANT、Maven、Gradle などのビルド ツールを使用できます)。また、参照は、java -jar MyJar.jar.

次に、それを実行します

java -jar MyJar.jar
于 2018-06-28T06:31:09.620 に答える