背景
最近新开发了一个syslog接收程序。用的springboot和jersey框架实现的。在本地用idea启动时测试都是正常的,可是打成jar包放到linux上就报错了。
报错信息如下:
报错分析
报错代码如下:
结合报错信息来看是由于找不到打成jar包的后该包的路径。
排查问题
首先,百度造成的原因,发现是由于jersey无法通过不解压扫描jar包中的包造成的。然后参照了列举的解决方案将Resource类组成一个单独模块,并通过在启动时unpacked等,均为解决问题。因此只能去看源码,寻找真正的报错原因。一步一步查询后,发现报错源码如下。FileInputStream无法读取路径/home/ponshine/bwt/bwtsyslog.jar!/BOOT-INF/classes。
解决方案
由于无法读取jar包里的路径,我的想法就是能不能将jar包解压出class文件,再启动,解压后文件路由如下
启动命令:
nohup /home/jdk1.8.0_131/jre/bin/java -classpath /home/ponshine/bwt/bwtsyslog/BOOT-INF/classes:/home/ponshine/bwt/bwtsyslog/BOOT-INF/lib/* com.ponshine.bwtsyslog.BwtsyslogApplication > bwtsyslog.log 2>&1 &
果然启动成功了。
总结:
经过此次排查,知道了查看源码的重要性。以前只是知道怎么用,却不知道为什么这么用,出了问题又不知道为什么又不能那样用。一步一步查看源码后豁然开朗,以后要多多熟悉源码。