工程里引入了某个射频机器的包,可以通过提供的 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 嘛?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.