工程里引入了某个射频机器的包,可以通过提供的 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 嘛?