发现一个小问题,归档项目部署包中竟然没有第三方 JNI 库,它是一个用 C 语言实现的 .so 文件。这导致项目部署的时候报 JNI 加载失败错误,具体怎么回事儿呢?
有一个项目的权限校验功能为了增加一点点可靠性,而采用 C 实现的。虽然 C 也能反编译,但是多少增加了一点成本,所以心理感觉还是靠谱一点。C 编译后的库函数是一个 .so 文件,放在项目 bin 目录下。
昨天从 SVN 检出部署包部署时,应用报了一个错:
java.lang.UnsatisfiedLinkError: Can't load library: /app/bin/xxx.so at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) at java.lang.Runtime.load0(Runtime.java:809) at java.lang.System.load(System.java:1086)定位发现 bin 目录下没有 .so 库文件,怀疑是 SVN 上传的问题。
验证了一下,新增五个文件,三种不同类型,右键“commit" 操作时,无版本的新文件中只有两个: 问题根源,右键 SVN 配置信息,ignore 列表中包含了几种:
移除上述红框中的 *.so 配置即可:
为什么默认文件排除了 .so 文件呢?可能是为了安全吧,自定义库毕竟是外来的,不一定靠谱。
大概现在用 SVN 的公司很稀少了吧,前两天有网友评论说还用 SVN 的公司,技术应该也很落后。工具也存在鄙视链啊,看来我也得补充一点 Git 的知识了!