SpringBoot在运行时抛出NoClassDefFoundError

时间:2018-02-13 23:22:45

标签: spring-boot activemq noclassdeffounderror

我们使用SpringBoot 1.4.7 web来部署ActiveMq 5.13.5代理。构建工件是一个由java命令启动的jar文件。大多数时候,它运行顺利,没有任何问题。但是,如果不重新启动应用程序,它会每天一次或两次随机抛出以下异常:

java.io.IOException: Unexpected error occurred: java.lang.NoClassDefFoundError: org/apache/activemq/command/ActiveMQTextMessage
    at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:222)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/apache/activemq/command/ActiveMQTextMessage
    at org.apache.activemq.openwire.v11.ActiveMQTextMessageMarshaller.createObject(ActiveMQTextMessageMarshaller.java:55)
    at org.apache.activemq.openwire.OpenWireFormat.doUnmarshal(OpenWireFormat.java:360)
    at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:277)
    at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:240)
    at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:232)
    at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)
    ... 1 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.apache.activemq.command.ActiveMQTextMessage
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:94)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 common frames omitted

我通过输出类加载调试确保在异常时间之前加载了类ActiveMQTextMessage。我还确保系统有足够的可用容量用于CPU,内存(堆和元),磁盘,文件句柄和套接字。

我在这里有几个问题:

  1. 任何人都看到了类似的问题,知道原因并修复了吗?
  2. SpringBoot是否在运行时卸载类并重新加载它们?
  3. 非常感谢任何进一步调试此类问题的提示。

    修改 编译和运行时的依赖关系树发布在此处:https://gist.github.com/liuzy163/8b8f8c7119624b5bdbe30e133d5f5910

0 个答案:

没有答案