0

ご挨拶、

私はmahoutで遊んでいます。いくつかのライブラリをインポートする、基本的なJavaクラスを作成しました。コンパイル時にクラスパスが正しいようです。エラーや苦情はまったくありません。

ただし、コンパイルされたクラスを実行すると、次のような例外が発生します...

Exception in thread "main" java.lang.NoClassDefFoundError: Test
Caused by: java.lang.ClassNotFoundException: Test
4

4 に答える 4

6

私の推測では、それ.はあなたのクラスパスにはありません。たとえば、次のコマンドでコンパイルしている可能性があります。

javac -cp foo.jar:bar.jar Test.java

しかし、必要なコードを実行するには

java -cp foo.jar:bar.jar:. Test

コンパイルするコードは、コードを提供するときにクラスパス上にある必要はありません(したがって、見つけるものは何もありません)。そのため、コンパイルはできますが、実行されません。

もちろん、これは単なる推測です。コードのコンパイルと実行に使用しているコマンドを投稿できれば、それは役に立ちます。

于 2010-02-20T18:26:27.357 に答える
2

私は今、エラーが発生していますjava.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

slf4j-api.jarクラスパスがありません。SLF4J では、ロギング フレームワークをバインドするためのslf4j-api.jar別の jarが常に必要です。実際、ロギングを気にしない場合は、代わりに.slf4j-nop.jarslf4j-log12.jar

更新: Mahout は Maven 中央リポジトリで利用できるようです。そのため、Maven を使用すると、クラス パスのセットアップ プロセスが容易になります。また、Maven の学習に興味がない場合は、コマンド ライン ランチャーであるMOPを使用して、Maven アーティファクトとその依存関係を透過的にダウンロードし、クラスパスを設定できる Java を実行することを検討してください。

于 2010-02-20T19:40:38.603 に答える
1

コンパイル時のクラスパスは正しく聞こえます。ランタイムクラスパスが間違っています。

そのクラスのjavadocsから:

Java仮想マシンまたはClassLoaderインスタンスがクラスの定義をロードしようとした場合(通常のメソッド呼び出しの一部として、または新しい式を使用した新しいインスタンスの作成の一部として)、クラスの定義が見つからなかった場合にスローされます。

検索されたクラス定義は、現在実行中のクラスがコンパイルされたときに存在していましたが、定義が見つかりません。

現在のディレクトリにTest.classファイルがありますか?誤って別のパスにコンパイルした可能性があります。

于 2010-02-20T18:26:40.150 に答える
1

Mahout を使用している場合は、Maven でビルドした後、target/ ディレクトリに「*.job」ファイルが生成されることに注意してください。このファイルには、パッケージ化されたすべての依存関係が含まれています。これは単なる .jar ファイルです。

于 2010-03-10T08:54:19.317 に答える