- - PR -
jarファイル実行時に、java.lang.NoClassDefFoundError: org/apache/log4j/Loggerと出る
«前のページへ
1|2|3
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-01-25 23:40
# java -cp agent.jar:log4j-1.2.12.jar socket/agent/Agent
あー、やっぱり"-cp"で、そうなりましたか。初心者にありがちです。 簡単に言って、こうしてください、、と言おうとしたのですが、 、、残念ながら、その"Agent.jar"とやらは、いわゆる「代理エージェント」 と言われる、ネットワーク通信しながら何かの処理を代理して行うタイプの プログラムそももののようです。 今のあなたの知識では起動どころか、テストが無理なので(苦笑)問題を分けましょう。 小さい問題にすれば、順々に解きほぐしていって、テストまでなら可能です。 とりあえず socket/agent/Agent.classをmini-agent.jarというパッケージ化したとしましょう。 ---以下の感じのAgent.javaをつくる(つもり) package socket.agent; public class Agent { static void Main(String argv[]){} //getLogging()なんとか。てきとー。 //要するにlog4jクラスライブラリを使ったプログラム。 } ---ここまで。 というクラスが(仮想的に)存在するとして、Agent.javaをコンパイルして jar cf mini-agent.jar ./socket/agent/ をしてmini-agent.jarを作った(つもり)になってください。そうすると 以下のように起動できます。 # java -cp ".:./mini-agent.jar:./log4j-1.2.12.jar" socket/agent/Agent javaの起動方法がイメージつきましたか。"-cp"とは、javaでコンパイルした後の .classだけが集まったjarファイル、あるいは.classそのもののあつまりを示します。 いうことであなたの持っている"Agent.jar"は、そもそも完全なクラス(.class)の集まり ではなく、ソースコードも何もかもをてきとーに集めたカタマリなのです。そのままでは 「起動」は出来ません。テストには十分なのでしょうけど。 で、"agent.jar"を真っ当に上記の考え方で生成した後で、再び"agent.jar"を 起動してください。 # java -cp ".:./agent.jar:./log4j-1.2.12.jar" socket/agent/Agent で、起動できるかどうかを確認してください。 最後にjarそのものを起動する方法があります。 # java -jar ./agent.jar socket/agent/Agent とかにします。ただし注意。この場合のjarにはjarは入りませんし、外部のjarは 使用できません。つまり.classだけのファイルにして、ぜーんぶagent.jarに 入れる必要があります。log4j.jarも一回ばらして(jar xvf log4j.jarして) agent.jarに入れなおす必要があります。 で、とりあえず起動終わり。次テスト。 、、、だれかこんぐらい周りのやつが説明してやれよ。。。 ペットボトル一個ぐらいで教えてやるのに。。 |
|
投稿日時: 2006-01-26 00:07
jarファイルはeclipseでまきさんが作成してるんですよね?
jarファイルにしないといけない理由はなんでしょう? jarで1ファイルにまとめる必要があるのであれば manifestについて調べる必要があります。 #説明しようにもmanifestはあんまり詳しくないので #説明できませんが |
|
投稿日時: 2006-01-26 10:25
加納さ、権兵衛さん、ありがとうございます。
jarファイルにしているのは、ソケットのクラス以外にもログやエクセプション、MD5を作るためのクラスなどたくさんあるので1つにまとめました。また、jarファイルを作成せずにコンパイルして実行しようとしてもできませんでした、、、これがまず?だったのですが。 さて、今やっていたこととしては、 @エクリプス上でjarファイルを作成(このときlog4j-1.2.12.jarが入っているlibフォルダは対象外としました) ALinuxに入れる前に、コマンドプロンプトでできるかを確認しました。Cドライブ直下にこれをおき、同じ階層にlog4j-1.2.12.jarをおいて実行 java-cp agent.jar;log4j-1.2.12.jar socket.agent.Agent Bログ出力成功 となりました。 そして、これをlinuxに移して実行します。 @/usr/local/agentを作成し、jarファイルを移動します。 A実行します。コマンドは /usr/〜(略:sdkが入っている場所)/java -cp agent.jar;log4j-1.2.12.jar socket/agent/Agent とするとエラーが出ます。エラーは後述します。 ローカルのコマンドプロンプトでできるのに、Linuxでできないのは何か違いがあるからなのでしょうか? 今まで教えていただいたり、調べたりしたやり方だと思ったのですが、、、エラーを見るとコマンドの指定が悪いと思うのですが、コマンドプロンプトでできたのに、、、 私自身、もっと調べてみますが、分かる方がいらっしゃったらご教授下さい。よろしくお願いします。 エラー: Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -client to select the "client" VM -server to select the "server" VM -hotspot is a synonym for the "client" VM [deprecated] The default VM is client. -cp <class search path of directories and zip/jar files> -classpath <class search path of directories and zip/jar files> A : separated list of directories, JAR archives, and ZIP archives to search for class files. -D<name>=<value> set a system property -verbose[:class|gc|jni] enable verbose output -version print product version and exit -version:<value> require the specified version to run -showversion print product version and continue -jre-restrict-search | -jre-no-restrict-search include/exclude user private JREs in the version search -? -help print this help message -X print help on non-standard options -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] enable assertions -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] disable assertions -esa | -enablesystemassertions enable system assertions -dsa | -disablesystemassertions disable system assertions -bash: log4j-1.2.12.jar: command not found |
|
投稿日時: 2006-01-26 10:38
Linuxでもできるようになりました。
先ほどできなかったのはjarを分けるところを;にしてたからで、:にすればよかったです。 加納さん、インギさん、ukさん、権兵衛さん、さいくろうさん、Edossonさん、ほんとにありがとうございました。 |
«前のページへ
1|2|3