- PR -

jarファイル実行時に、java.lang.NoClassDefFoundError: org/apache/log4j/Loggerと出る

投稿者投稿内容
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-25 16:46
ん?なんか変ですがもう一度。

クラスパスの設定になれないうちにかなり特殊なパターンに遭遇してしまいましたね。
その製品のドキュメントかなにかに書いてありませんか?
特殊なケースなのでドキュメントにかいてあるかと思います。

それはそのままでは指定できないと思います。たぶん。
展開して生の(?)jarファイルをクラスパスに通しましょう。
まき
常連さん
会議室デビュー日: 2006/01/24
投稿数: 23
投稿日時: 2006-01-25 17:08
インギさん、それはどういうことでしょうか?

jarを展開して実行すると、
Exception in thread "main" java.lang.NoClassDefFoundError: Agent
と出力します。

また、製品のドキュメントとはどのようなものでしょうか?

申し訳ありませんが教えてください。よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-25 17:15
製品のドキュメントとは、製品に付属している使い方などを説明した文書のことです。
というのも、自分で書いたプログラムであればこのテのことは大抵わかるので、わからないということは既存のなんらかの製品を使っているのではないかと推測したわけです。

NoClassDefFoundError はクラスパスにクラスが見つからないという意味です。Java コマンドのクラスパスの指定方法を今一度確認してください。これも java 自体に付属しているドキュメントから確認できます。さいくろうさんが指摘されているものですね。
まき
常連さん
会議室デビュー日: 2006/01/24
投稿数: 23
投稿日時: 2006-01-25 17:46
実はこれはほかの人が作ってテストから私がひきついだものになっているのです。その人はもうおらず、誰も分からないため、一人で焦っている状態です、、、logをはかなければ実行できることは確認できたのですが、logをはかないとだめらしくて。

教えていただきたいことがあるのですが、もしこのような特殊なケースでない場合、jarファイルを実行するにはどのようなコマンドをうてばよいのですか?知識不足で申し訳ないのですが、ご教授ください。お願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-25 18:11
なるほど、大変な状況ですね。
しかし先の説明は読まれましたか?
NoClassDefFoundError の意味を説明しました。
また、クラスパスの指定方法についてはさいくろうさんが指摘されたドキュメントをご覧になると大変参考になるかと存じます。
それらを踏まえた上で今一度見直し、さらに分からない点があればもう少し具体的に何がわからないか示すことができるかと思います。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-01-25 18:48
引用:

まきさんの書き込み (2006-01-25 14:13) より:
-cpオプションにlog4jのjarファイルを追加するのは今日の朝にやってできなかったのですが、やり方がぜんぜん違っていたかもしれません。すぐにだめだとあきらめてました。私が試したコマンドは、

...(略)/bin#java -cp agent.jar socekt/agent/Agent; log4j-1.2.12.jar org/apache/log4j/Logger

...(略)/bin#java -cp agent.jar socket/agent/Agent; log4j-1.2.12.jar

...(略)/bin#java -cp log4j-1.2.12.jar org/apache/log4j/Logger; agent.jar socket/agent/Agent

...(略)/bin#java -cp log4j-1.2.12.jar; agent.jar socket/agent/Agent

...(略)/bin#java -cp log4j-1.2.12.jar; agent.jar socket/agent/Agent


クラスパスの指定の仕方が間違っています。複数のパスを指定する場合、Unixであれば、
以下のようにコロン(で連結します。

java -cp agent.jar:log4j-1.2.12.jar socket.agent.Agent

気になるのは最初の書き込みに

引用:

また、agent.jarのフォルダ構成は
src-----(略)---javaファイル
|
lib-----log4j1.2.12.jar
|
bin------(略)---classファイル
|
log4j.property


とあることです。これはagent.jarの中身がこうなっている、ということでしょうか。
なんとなく開発環境(Eclipse)でのディレクトリ構成のように思えるのですが。
まき
常連さん
会議室デビュー日: 2006/01/24
投稿数: 23
投稿日時: 2006-01-25 19:18
インギさん、ukさん、ありがとうございます。さいくろうさんが添付してくださったURLをみました。

ukさんに教えていただいたようにjava -cp agent.jar:log4j-1.2.12.jar socekt/agent/Agent
と打ちましたがダメでした。

またさいくろうさんのURLに書いてあったように、java-cp clathpass path1:path2とあるので、
java -cp agent.jar socket/agent/Agent:lib/org/apache/log4j/Loggerとしました。Loggerを入れたのは前にエラーでLoggerのクラスパスにファイルがないと出たためで、いれるべきなのかな?と思いました。

これもエラーがでました。エラーはやはりorg/apache/log4j/Loggerがないということです。また、-bash: lib/org/apache/log4j/Logger:そのようなファイルやディレクトリはありませんとも出てきました。

全体的に理解できていないのですが、特にagent.jarの中にあるlog4j-1.2.12.jar中のファイルに関するクラスパスの設定です。これの対処が朝からずっと分かっていないので、少しでも分かる方がいらっしゃったら解説していただきたいです。教えてもらってばかりで申し訳ないのですが、お願いします。

そして、ukさんの指摘どおり、agent.jarの中身間違ってました。libにlog4j-1.2.12.jar, socket/配下にclassファイルが入っています。ご指摘ありがとうございました。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-01-25 19:41
引用:

まきさんの書き込み (2006-01-25 19:18) より:
そして、ukさんの指摘どおり、agent.jarの中身間違ってました。libにlog4j-1.2.12.jar, socket/配下にclassファイルが入っています。ご指摘ありがとうございました。


jarファイルの中にjarファイルを入れてもだめです。log4j-1.2.12.jarを取り出して
agent.jarと同じディレクトリに置き、同じコマンドで実行してみてください。

スキルアップ/キャリアアップ(JOB@IT)