5

このエラーに関する既存のスレッドの多くを調べましたが、まだうまくいきません。jar をパッケージ化しようとしたり、サードパーティのパッケージ化ツールを使用したりしようとしているわけではありません。私は単純に Eclipse 内から実行しており (うまく動作します)、ビルド先と同じ場所でコマンドラインからまったく同じアプリを実行しようとしています (このエラーが発生します)。私の目標は、bin フォルダーを圧縮して送信し、コマンド ライン スクリプトを介して他のユーザーが実行できるようにすることです。いくつかの詳細:

  • これはコマンドライン アプリで、文字列ユーティリティには commons-lang-2.4.jar を使用しています。それが見つからないファイルです (具体的には「java.lang.NoClassDefFoundError: org/apache/commons/lang/StringEscapeUtils」)
  • libフォルダーにそのjarがあり、「ビルドパス->ビルドパスに追加」を右クリックしてEclipseのビルドパスに追加しました
  • .classpath ファイルは正しいように見え、jar への参照が含まれていますが、ファイルは Eclipse でのみ使用されると想定しています (次の行が含まれています: <classpathentry kind="lib" path="lib/commons-lang-2.4.jar"/>)
  • これは、Eclipse の作業ディレクトリの設定に関連している可能性がありますか? src/templates の下に作成した内部テンプレート ファイルがいくつかありますが、それらを表示するには、プロジェクトの作業ディレクトリを AppName/src に設定するしかありません。多分私はそれらをどこかに置くべきですか?

追加情報が役立つかどうか教えてください。確かにこれは単純なことですが、この時点であまりにも多くの時間を無駄にしました。これは、私が最初に '05 かそこらで Java を離れた理由を思い出させます...

4

7 に答える 7

13

ANoClassDefFoundErrorは基本的に、クラスがコンパイル時にクラスパスにあったが、実行時にクラスパスにないことを意味します。

あなたの場合、コマンドラインから実行するときは、または引数java.exeでクラスパスを指定する必要があります。または、JAR ファイルの場合は、そのファイルのエントリで指定する必要があります。-cp-classpathclass-pathMANIFEST.MF

引数/エントリの値は、すべての.classファイルを含むフォルダーまたは個々の.jarファイルへの絶対または相対ファイル システム パスのいずれかです。セミコロンを使用してパスを区切ることができます;。パスにスペースが含まれている場合は、特定のパスを二重引用符で囲む必要があります"。例:

java -cp .;c:/path/to/file.jar;"c:/spacy path/to/classes" mypackage.MyClass

コマンドラインで毎回引数を入力して編集する手間を省くには、.batファイルを使用します。

編集: Unix ベースのオペレーティング システムを使用していることに気付くべきでした。上記の例は Windows を対象としています。Unix のようなプラットフォームの場合、同じ規則に従うことができますが、コロンを使用してパスを区切り、:最終的なバッチ ファイルの代わりにファイルを使用する必要があり.shます。

java -cp .:/path/to/file.jar:"/spacy path/to/classes" mypackage.MyClass
于 2009-11-09T18:37:21.003 に答える
6

コマンドラインで java へのクラスパスを指定していますか?

$ java -cp lib/commons-lang-2.4.jar your.main.Class
于 2009-11-09T18:34:50.463 に答える
2

Eclipse で設定するクラスパス設定は IDE 専用であり、IDE の外部でアプリケーションを実行する方法には影響しません。Eclipse 機能を使用してアプリケーションを実行可能な jar ファイルとしてエクスポートしたとしても、アプリケーションが依存するすべての jar をパッケージ化するすぐに使える方法はありません。

アプリケーションを jar ファイルにパッケージ化した場合myapp.jar、次のようなコマンドを実行すると、依存する jar を使用してアプリケーションが実行さ;れます:

java -jar myapp.jar -cp .;c:/pathtolibs/commons-lang-2.4.jar

クラスを直接実行しているだけの場合は、.classファイルを含むフォルダーを実行することもパス上にある必要があります(ただし、プログラムを実行してエラーを取得できるため、すでにパスしていると思います)。

于 2009-11-09T18:46:22.257 に答える
1

File -> Export -> Runnable jar を検討して、直接呼び出すことができるjarファイルを作成します

java -jar yourProgram.jar

ニーズに応じていくつかのバリエーションがあります。

于 2009-11-09T19:23:45.223 に答える
0

デフォルトでは、Eclipse は実行可能な Java クラスをビルドしません。理由は聞かないでください。おそらく、JDK なしで Eclipse を実行できるように独自の tools.jar (plugins/org.eclipse.core のどこか?) を使用することと関係があります。

通常、プロジェクトの bin ディレクトリに移動して、次の操作を実行できます。

java -cp . MyClass

しかし、外部 jar がある場合、Eclipse はそれらを別の奇妙な方法で内部的に処理するため、それらも追加する必要があります。

于 2011-02-10T01:50:50.970 に答える
0

Eclipse は、クラスパス内の jar をプロジェクトの bin フォルダーに移動しません。util jar を bin フォルダーにコピーする必要があります。bin フォルダーのルートに移動すると、クラスパス エントリがなくても問題を解決できる可能性がありますが、推奨される解決策ではありません。それを十分にカバーするには、 @BalusCの回答を参照してください。

于 2009-11-09T18:42:18.927 に答える
0

commons-lang-2.4.jar冗長ではなくクラスパスにあることを確認してください。

クラスパスにjarファイルを追加したことがあり、クラスパスに2つのファイルjarがあります。削除したらスムーズに作業できます

于 2014-03-11T10:34:11.180 に答える