0

ヘルパー クラスとメソッド (主に静的メソッド) を含む 2 つの jar ファイル my.common.jar を作成しました。また、my.common.jar 内のクラスの静的メソッドを呼び出すメイン メソッドを含む jar ファイル test.jar も作成しました。

次のようにメインを起動すると、すべて正常に動作します。

java -classpath path/to/myjars/my.common.jar:./test.jar test.Tester

Tester は、main メソッドを含む test.jar 内のクラスです。

しかしNoClassDefFoundError my/common/Myclass、この方法で実行すると次のようになります。

java -classpath path/to/myjars/my.common.jar -jar test.jar

一生懸命試しましたが、失敗する理由やこの問題を解決する方法がわかりません。私はあなたの助けに感謝します.

----- 補遺 ---- test.jar のマニフェスト ファイルが次のようになっていることを忘れていました。

    Manifest-Version: 1.0
    Build-Jdk: 1.6.0_13
    Created-By: Apache Maven
    Main-Class: test.Tester
    Archiver-Version: Plexus Archiver
4

2 に答える 2

3

コマンド ラインで-classpathとオプションの両方を使用することはできません。-jarどちらか一方を使用してください...両方ではありません。

このオプションを使用する-jarと、コマンドは JAR ファイル マニフェストでエントリ ポイント クラスとランタイム クラスパスを検出することを想定します。CLASSPATH-classpath環境変数と同様に、引数は無視されます。javaマニュアルページから引用するには:

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

(実行可能な) JAR ファイルが他の JAR のものを使用する必要がある場合Class-Pathは、マニフェストに属性が必要です。この属性値は、スペースで区切られた URL のリストです。ここを参照してください。

したがって、あなたの場合、次のようなものを JAR のマニフェストに追加する必要があります。

Class-path: /path/to/myjars/my.common.jar

Java チュートリアルのこのページClass-pathでは、このトピックについて説明しており、マニフェスト行は JVM が認識できるように CR または NL で適切に終了する必要があるという警告が含まれています。

于 2012-11-19T22:16:44.903 に答える
0

マニフェストを test.jar に入れます。他の jar は、通常、./lib ディレクトリに入ります。META-INF/MANIFEST.MF を jar に追加するには、通常、ビルド インフラストラクチャ (ant または maven) を使用できます。または、手動で行います。

Main-Class: test.Tester で既にそれを持っています。今クラスパス:...

Maven では、通常、依存関係は pom.xml の jar に追加されます。mvn を使用してリポジトリに配置できる独自の jar ファイル。そして、pom.xml で依存関係を追加します。

于 2012-11-19T22:20:27.330 に答える