背景
继上一篇重命名问题解决之后, 我发布到服务器上进行使用, 却发现了新的问题
Caused by: java.lang.ExceptionInInitializerError: JCo initialization failed with java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path
该问题产生的原因为: sapjco3需要本地库,在下载使用sap时,包中应该附带so文件和dll文件. 而这两个文件就是sapjco3使用时所必须的产物
解决方案
因为我是部署在linux 因此这里着重讲讲linux的解决方案,windows的方案大同小异, 所以我只会简单说说windows下怎么做测试用sap
1. windows
因为大部分人只是在windows进行开发并且测试, 那么这里我说一下我是如何进行windows本地测试的
- 在项目目录创建一个文件夹(名字你随意),我起名为libs. 在里面放入sapjco3.jar以及对应的dll文件, 这两个是在windows运行的关键
- pom文件中进行system导入
- 上面两项做好之后,本地启动测试就ok了(应该吧…) 反正我是没问题的
(~ ̄▽ ̄)~
老规矩, 上图
在这里说一下, 因为你是本地导入,所以你不用担心重命名的问题,你只需要保证你要导入的jar包名称是对的就可以
2. linux
然后就是今天的大头 - linux !
linxu的也很简单, 只不过当时踩了不少坑, 还有一些问题现在也没搞明白…
当时是根据搜到的资料, 将sapjco3的jar包放入了jdk的lib目录下, 然后把libsapjco3.so放入了jre.lib.amd64.serve下 然后配置LD_LIBRARY_PATH环境变量并且导出
只不过当时搞完这一套没啥作用,现在想来应该是没有重启项目的问题, 因为jvm的环境变量只会在初始加载一次
那么除了上面这种, 我再说一说我的方案吧
- 下载saplinux的包,并将其解压到你觉得合适的目录 [正常的包中应该有jar包,dll文件,so文件这三个]
- 在你项目的启动命令中加入jvm的地址命令 -Djava.library.path=你放置的目录
- 然后启动项目, 收工 !
那么如果你的项目已经配置了-Djava.library.path, 那你可以放到对应的path中,或者使用上面那种方法, 这都是可以的, 而且LD_LIBRARY_PATH与-Djava.library.path是叠加关系,并非是覆盖关系, 你可以放心
那么老规矩, 放一下我的参考资料吧
- https://stackoverflow.com/questions/26184304/talend-java-lang-unsatisfiedlinkerror-no-sapjco3-in-java-library-path
- https://www.cnblogs.com/rinack/p/6866191.html
- https://github.com/easonjim/jco-sdk
- https://juejin.cn/post/6914109294887567373
- https://blog.csdn.net/Jay_1989/article/details/71404398