2011-08-23 21 views
5

私はantスクリプトを使用して実行可能なjarファイルを作成しましたが、私が使用した外部jarファイルはjoda-time 2.0のみでした。コンパイルエラーが発生しなかったので、ant buildスクリプトは "うまくいきました"。そして、libディレクトリからjode-time 2.0.jarを削除すると、ビルドは実際に期待通りに失敗するでしょう。スレッドmainの例外java.lang.NoClassDefFoundError:org/joda/time/ReadableInstant

のjava -jarスレッドでmyapp.jar

例外「メイン」java.lang.NoClassDefFoundErrorが:ORG /ジョダ/時間私が実行しようとすると、任意のレートでは、jarファイルを構築した後、私はこのエラーを取得します/ ReadableInstant

これについてのご意見はありますか?私は見た目が分からないだけで、Eclipse内ですべてうまく動作します。何かありがたいです

答えて

9

おそらく、あなたのjarには、joda-time jarをクラスパスに追加するようにJavaに指示するmanifest headerは含まれていないと思われます。これは、java -jarを使用するときに他のクラスパスエントリを持つ唯一の方法です。これをAnt manifest taskで直接行うこともできますし、既存のクラスパスからビルドするなど、他にも複数の方法があります。

代わりに、カスタムクラスローダまたはJarJarのようなものを使用している場合を除き、その後、あなたが実行可能なJAR内の外部JARをバンドルすることはできません

java -cp myapp.jar:joda-time-2.0.jar com.foo.YourMainClass 
2

を試してみてください。マニフェストファイルはクラスパスをリストする必要がありますが、JVMは実行可能なJAR内ではなく、実行可能なJARと同じディレクトリにリストするJARファイルを探します。

関連する問題