- PR -

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

投稿者投稿内容
まき
常連さん
会議室デビュー日: 2006/01/24
投稿数: 23
投稿日時: 2006-01-25 13:12

前トピックと趣旨が変わってきたので新たにスレッドを作成します。

問題はjava -cp agent.jar agent.socket.Agentというコマンドを実行した際(agent.jarのAgent.classを実行する)、
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger

at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unkonwn Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Laucher$AppClassLoader.loadClass(Unknown Source)
at at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at client.socket.agent.Agent.<clinit>(Agent.java:38)

と表示されます。Agent.javaの38行目は、
private static AgentLogger log = AgentLogger.getAgentLogger(Agent.class)
となっています。

また、agent.jarのフォルダ構成は
src-----(略)---javaファイル
|
lib-----log4j1.2.12.jar
|
bin------(略)---classファイル
|
log4j.property
のようになっています。
jarファイルはエクリプスで作成しており、エクリプス上では正常に動くことも確認できています。

エラーから、log4j-1.2.12.jarのorg/apache/log4j/Logger.classがないのかなと思ったのですが、調べたらありました。あとはパスの設定が間違っているなどでしょうか?

また、log4j-1.2.12.jarのMANIFEST.MFにMain-Classの記述がないのですが、これも関係あるのでしょうか?

分かる方いらっしゃいましたら教えていただきたいです。よろしくお願いします。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-01-25 13:22
ちょっとでも自分で調べたんですか?
-cpオプションに、log4j1.2.12.jarを追加してごらんなさい。
まき
常連さん
会議室デビュー日: 2006/01/24
投稿数: 23
投稿日時: 2006-01-25 14:13
Edossonさん、ありがとうございます。

一応調べてはいるのですが、、、まだまだ調べ方が甘いですよね。ご指摘ありがとうございます。

-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


の5種類です。まったく理解できていないため、見当違いな気もするのですが。私自身ももう少しねばって調べてみますので、お力を貸してください。よろしくお願いします。


山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-25 14:21
あんまり root のまま作業するのはお勧めしません。
たぶんいじり倒してもよい環境で作業しているのだとは思いますが・・。
Unix でパスをどのように表記するか調べてみましょう。
[java "-cp" クラスパス linux]とか。
さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2006-01-25 15:50
http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/solaris/classpath.html

それと、log4j-1.2.12.jarがちゃんと見えるように、指定するんですよ。念のため。
まき
常連さん
会議室デビュー日: 2006/01/24
投稿数: 23
投稿日時: 2006-01-25 16:23
インギさん、またまたありがとうございます。rootでの作業は、今回は大丈夫なのですが、あまりrootでは作業しないほうがよいですね。ありがとうございます。

パスですが、agent.jarがカレントディレクトリにある場合は./agent.jarと書くということは分かったのですが、agent.jarの中にあるlog4j-1.2.12.jarの扱いは、、、

jarファイルの中に別のjarファイルが存在する例などを探してみたのですが、見つけられませんでした。エクリプスでlog4j-1.2.12.jarのぱすをみたところagent/lib/log4j-1.2.12.jar(agentがプロジェクト名)だったのですが、同じように設定できるわけではないですよね。すごく難しいです。。。

log4j-1.2.12.jarのクラスパスの指定方法についてもう少し教えてください。すみませんがよろしくおねがいします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-25 16:32
クラスパスの設定になれないうちにかなり特殊なパターンに遭遇してしまいましたね。
その製品のドキュメントかなにかに書いてありませんか?

それはそのままでは指定できないと思います。たぶん。
展開して生の(?)jarファイルをクラスパスに通しましょう。
まき
常連さん
会議室デビュー日: 2006/01/24
投稿数: 23
投稿日時: 2006-01-25 16:33
インギさん、またまたありがとうございます。rootでの作業は、今回は大丈夫なのですが、あまりrootでは作業しないほうがよいですね。ありがとうございます。

パスですが、agent.jarがカレントディレクトリにある場合は./agent.jarと書くということは分かったのですが、agent.jarの中にあるlog4j-1.2.12.jarの扱いは、、、

jarファイルの中に別のjarファイルが存在する例などを探してみたのですが、見つけられませんでした。エクリプスでlog4j-1.2.12.jarのぱすをみたところagent/lib/log4j-1.2.12.jar(agentがプロジェクト名)だったのですが、同じように設定できるわけではないですよね。すごく難しいです。。。

log4j-1.2.12.jarのクラスパスの指定方法についてもう少し教えてください。すみませんがよろしくおねがいします。

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