NoClassDefFoundError javax / jms /甚至在指定classpath时也是消息

前端之家收集整理的这篇文章主要介绍了NoClassDefFoundError javax / jms /甚至在指定classpath时也是消息前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在运行与JMS有关的某些Java代码时遇到错误.我已经把头发拉了两天试图解决这个问题.@H_301_2@

我得到的例外是“java.lang.NoClassDefFoundError:javax / jms / Message”@H_301_2@

@H_301_2@

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

没有详细介绍TOO,这是指这一行:@H_301_2@

@H_301_2@

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);
}

(不要问为什么这个函数基本上映射到另一个…我最初没有编写这段代码)@H_301_2@

我把这段代码称为@H_301_2@

@H_301_2@

java -jar /path/myjarfile.jar

javax.jms.jar包含在该jar的清单中(并且它存在于该位置),但以防万一我还尝试将类路径包含到我的lib文件夹(当然包含javax.jms.jar),如下所示:@H_301_2@

@H_301_2@

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

到目前为止我没有运气.我不知道该怎么做或如何调试这个问题.任何帮助将不胜感激.显然,这段代码会编译,因此这些类必须在编译时(至少)可用.@H_301_2@

谢谢.@H_301_2@

EDITS:@H_301_2@

1)我也尝试过
    java -classpath /path/lib/javax.jms.jar:. -jar /path/myjarfile.jar@H_301_2@

2)此问题发生在运行时,而不是编译时.@H_301_2@

3)所以,我有其他代码在相同的jar文件调用相同的方法.从特定的jar调用代码时,有些东西没有正确啮合.我检查并重新检查了我的其他代码,以确保它是相同的(它是/是),所以它似乎不是一个代码问题.在某处似乎有一些混乱的参考或某事.@H_301_2@

最佳答案
你可能有一个类加载器冲突,其中一个版本的javax.jms.Message被加载到一个类加载器中,然后它正在使用从不同的类加载器加载的不同版本.@H_301_2@

你可以为JMSManager和JMSProducer添加一个静态初始化程序来做这样的事情吗?@H_301_2@

@H_301_2@

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

如果他们打印出不同的URL,则意味着你在类路径中有多个javax / jms / Message.class副本,而你的两个JMS人员每个都加载不同的副本.@H_301_2@

如果不是…..好,发布你看到的:)@H_301_2@

原文链接:https://www.f2er.com/java/438338.html

猜你在找的Java相关文章