java - NoClassDefFoundError javax/jms/Message 即使在指定类路径时也是如此

标签 java exception jms noclassdeffounderror

我在运行与 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 的 list 中(它存在于该位置),但以防万一我也尝试将类路径包含到我的 lib 文件夹(当然包含 javax.jms.jar )如下:

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

到目前为止我运气不好。我不确定该怎么做或如何调试这个问题。任何帮助将不胜感激。显然,此代码可以编译,因此这些类必须(至少)在编译期间可用。

谢谢。

编辑:

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

2) 这个问题发生在运行时,而不是编译时。

3) 因此,我有其他代码可以在同一个 jar 文件中调用相同的方法。从特定 jar 调用此代码时,有些东西啮合不正确。我检查并重新检查了我的其他代码以确保它是相同的(它是/是),所以它看起来不像是代码问题。某处似乎有一些乱七八糟的引用或其他东西。

最佳答案

您可能遇到类加载器冲突,其中一个版本的 javax.jms.Message 加载到一个类加载器中,然后它与从不同类加载器加载的不同版本发生冲突.

你能为 JMSManager 和 JMSProducer 添加一个静态初始化器来做这样的事情吗?

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

如果他们打印出不同的 URL,这意味着您在类路径中有多个 javax/jms/Message.class 副本,并且您的两个 JMS 人员各自加载了不同的副本。

如果不是......好吧,发布你看到的:)

关于java - NoClassDefFoundError javax/jms/Message 即使在指定类路径时也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15303535/

相关文章:

java - 如何在企业java应用程序中发送jms回复

java - 在 GWT 中创建模态对话框

c# - 无法转换类型为 'System.Data.Objects.ObjectQuery` 的对象 1 [Manager.Data.Channel ]' to type ' Manager.Data.Channel'

java - 在 Spring MVC Web 应用程序中,您应该如何处理 Controller 级别以下发生的异常?

java - 这个 try and catch 方法有什么作用?

jms - 连接到 tibco 并查看队列中的消息正文

java - 使用 Active MQ 的示例 JMS 示例

java - Spring @Autowire 在 Kotlin 中不起作用

java - 认证有效用户

java - Intellij IDEA 控制台日志记录被 TestNG 运行/调试配置截断