1. ホーム
  2. java

[解決済み] コマンドラインからJARファイルを実行し、クラスパスを指定する

2022-06-18 12:17:54

質問

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

試してみました。

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

etc...

というエラーがそれぞれ出ます。

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

を与えるか、あるいは NoClassDefFoundError が表示され、ライブラリが見つからないことを示します。

JAR ファイルを作り直すことも試しましたが、その際には lib ディレクトリとコンテンツも含めましたが、それでもダメでした...。

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

どのように解決するのですか?

を指定した場合 -jar を指定すると -cp パラメータは無視されます。

から ドキュメント :

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

また、必要な jar ファイルを別の jar ファイルに "include" することはできません (内容を展開して .class ファイルを jar ファイルに入れる必要があります)。

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

  1. のすべての jar ファイルをインクルードする。 lib ディレクトリのすべての jar ファイルをマニフェストに含めます (相対パスを使用することができます)。
  2. すべてを指定する ( を含む jar) をコマンドラインで指定します。 -cp :

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