0

外部ライブラリ(org.vinay.dep.DependedClassというクラスファイルが1つだけ)があります。これはパッケージディレクトリ構造内にあり、ディレクトリorgはデスクトップ上にあります。

そして、外部ライブラリに依存するa.jarというjarがあります。

実行jar -tf a.jarすると、以下の出力が得られます。

META-INF/                
META-INF/MANIFEST.MF     
com/      
com/os/          
com/os/hw/          
com/os/hw/HelloWorld.class       
com/os/hw/HwUtil.class 

私は2つの方法でjarを実行しようとしました

  1. java -classpath C:/Users/vinay/Desktop -jar a.jar マニフェスト.mfエントリが

    マニフェスト-バージョン:1.0
    作成者:1.6.0_05(Sun Microsystems Inc.)
    メインクラス:com.os.hw.HelloWorld

    DependedClassのNoClassDefFoundErrorを取得しました

  2. java -jar a.jar マニフェストエントリを以下のように変更した後

    マニフェスト-バージョン:1.0
    作成者:1.6.0_05(Sun Microsystems Inc.)
    メインクラス:com.os.hw.HelloWorld
    クラスパス:C:/ Users / vinay / Desktop

    ただし、今回はHelloWorld クラス自体にNoClassDefFoundErrorがスローされました

外部ライブラリをjarにパッケージ化し、マニフェストファイルのクラスパスエントリにjar名を使用すると、機能します。外部ライブラリをjarにパッケージ化せずに、この問題を解決する方法はありますか?

4

1 に答える 1

1

-classpathと-jarを組み合わせることはできないと思います。代わりに、次のようにすることができます。

java -cp C:/Users/vinay/Desktop;a.jar com.os.hw.HelloWorld

これは、a.jarが現在のフォルダーにあることを前提としています(または、a.jarへのフルパスを追加することもできます)。

マニフェストのClass-Pathエントリをローカルマシンのパスにハードコーディングすることは、決して正しい解決策ではありません:)

于 2012-06-07T11:07:07.253 に答える