5

JMS に関連する特定の Java コードを実行すると、エラーが発生します。私はこれを理解しようとして2日間髪を引っ張ってきました.

私が得ている例外は "java.lang.NoClassDefFoundError: javax/jms/Message" です

java.lang.NoClassDefFoundError: javax/jms/Message
    at Asci.ActiveBatch.JMSAgent.JMSManager.createMsg(JMSManager.java:195)
    at Asci.ActiveBatch.JMSAgent.JMSService.SendMessageHandler(JMSService.java:160)

あまり詳しく説明しませんが、これは次の行を指しています。

public static void createMsg(String icf, String url, String cf, String QName, String msgText, String[] props, String user, String pass) throws Exception {
    JMSProducer.produceMsg(icf, url, cf, QName, msgText, props, user, pass);
}

(なぜその関数が基本的に別の関数にマッピングされているのかを尋ねないでください...私はもともとこのコードを書いていません)

私はこのコードを次のように呼んでいます

java -jar /path/myjarfile.jar

javax.jms.jar はその jar のマニフェストに含まれています (そしてその場所に存在します) が、次のように lib フォルダー (もちろん javax.jms.jar を含む) へのクラスパスを含めてみました。 :

java -classpath /path/lib:. -jar /path/myjarfile.jar

今まで運がなかった。何をすべきか、この問題をデバッグする方法がわかりません。どんな助けでも大歓迎です。明らかに、このコードはコンパイルされるため、これらのクラスは (少なくとも) コンパイル時に使用可能でなければなりません。

ありがとう。

編集:

1) java -classpath /path/lib/javax.jms.jar: も試しました。-jar /パス/myjarfile.jar

2) この問題は、コンパイル時ではなく実行時に発生します。

3) したがって、同じ jar ファイルで同じメソッドを呼び出す他のコードが動作します。特定の jar からこのコードを呼び出すときに、正しく噛み合わないものがあります。他のコードをチェックして再チェックして、それが同一であることを確認したため(以前と同じ)、コードの問題のようには見えません。めちゃくちゃな参照か何かがどこかにあるようです。

4

3 に答える 3

4

javax.jms.Messageの 1 つのバージョンが 1 つのクラスローダにロードされ、別のクラスローダからロードされた別のバージョンと競合するクラスローダの競合が発生している可能性があります。

このようなことを行うために、JMSManager と JMSProducer に静的初期化子を追加できますか?

static {
   System.out.println("MESSAGE CLASSLOADER IN JMSMANAGER:" + 
       javax.jms.Message.class.getProtectionDomain().getCodeSource().getLocation());
}

それらが異なる URL を出力する場合は、クラスパスに javax/jms/Message.class の複数のコピーがあり、2 人の JMS スタッフがそれぞれ異なるものをロードしていることを意味します。

そうでない場合は.....まあ、あなたが見たものを投稿してください:)

于 2013-03-08T21:37:45.933 に答える
0

まだそこにない場合は、WEB-INF 内に lib フォルダーを作成します。この jar を入れます: javax.jms.jarとサーバーを再起動します。

于 2015-12-09T21:07:12.210 に答える
0

クラスパスにa を追加するとき.jarは、jar が入っているフォルダーではなく、jar を直接参照する必要があります。

java -classpath /path/lib/JMS.jar:. -jar /path/myjarfile.jar
于 2013-03-08T21:35:27.373 に答える