关于 idea 启动和 jar 启动 classloader 加载顺序的问题
資深大佬 : aragakiyuii 10
工程里引入了某个射频机器的包,可以通过提供的 tcp 或者 serial 方式进行连接。serial 方式依赖于 RXTXcomm 这个包,但是它把这个依赖放到自己的 jar 中了(疑惑
springboot 打成 fat jar 之后大致是这样的
BOOT-INF -classes -lib -xxx.jar -lib -RXTXcomm.jar
tcp 方式
public class Reader { //这个里面没有用到 RXTXcomm 中的类 public static boolean tcpConnect() { return doSomething(); } }
serial 方式
public class Reader { //这个里面使用了 RXTXcomm 中某些类 public static boolean serialConnect() { return doSomething(); } }
我采用了 tcp 方式,通过 idea 启动没什么问题。可是打包成 jar 包启动时就会抛异常
ClassNotFoundException: gnu.io.SerialPortEventListener
我调用的静态方法没有用到SerialPortEventListener这个类,并且 Reader 这个类里定义的全局变量中也没有用到SerialPortEventListener,为什么 idea 启动时不会加载而通过 jar 的方式启动会去加载呢? classloader 不是等到使用到某个类的时候才会去 findClass 嘛?
大佬有話說 (0)