天下之事,必先处之难,而后易之。

Java 第三方库依赖引用说明

java中调用第三方库的方式是通过JNI调用dll或so来实现的。这里以一个linux依赖异常为例:java.lang.UnsatisfiedLinkError: no webp-imageio in java.library.path。此为使用webp调用依赖而出现的问题,下一篇着重讲webp使用的坑。

目录

编译系统依赖路径java.library.path

Linux so 放置路径

Windows dll放置路径

特别说明

阿里云环境特别说明

编译系统依赖路径java.library.path

使用以下代码编译后便于在其他系统中使用:

import java.io.IOException;

public class Library {
	public static void main(String[] args) throws IOException {
		 System.out.println(System.getProperty("java.library.path"));
	}
	
}

进入Library.java所在的目录执行编译:

C:\Users\admin\Desktop>javac Library.java

C:\Users\admin\Desktop>java Library
C:\Program Files\Java\jdk1.8.0_121\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:\Program Files (x86)\NetSarang\Xftp 6\;C:\Progra
s\Java\jdk1.8.0_121\bin;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x8
QL\MySQL Utilities 1.4.3\;C:\Program Files (x86)\MySQL\MySQL Utilities 1.4.3\Doctrine extensions for PHP\;C:\Oracle\product\11.2.0\client_lite\b
DEVELOPEWORKS\Maven\apache-maven-3.5.0/bin;D:\DEVELOPEWORKS\SVNInstall\bin;D:\DEVELOPEWORKS\Tomcat\apache-tomcat-7.0.92\lib;D:\DEVELOPEWORKS\Tom
ache-tomcat-7.0.92\bin;%JMETER_HOME%\bin;C:\Program Files\nodejs\;C:\strawberry\c\bin;C:\strawberry\perl\bin;C:\Program Files\Git\cmd;D:\DEVELOP
\zookeeper-3.4.13\bin;D:\DEVELOPEWORKS\mytest\apache-jmeter-5.0\bin;C:\Program Files\CMake\bin;C:\Users\admin\AppData\Roaming\npm;.

C:\Users\admin\Desktop>

Linux so 放置路径


使用我们编译好的class获取java.library.path路径:

$java Library

/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

看一下这几个目录,/usr/java/packages/lib/amd64不存在,/usr/lib64正好是我们要放置的so路径。

将依赖的webp-imageio.so包放入/usr/lib64下,启动项目操作正常。

Windows dll放置路径

windows下就简单多了直接执行Java:

Windows下直接放在jdk/bin目录即可,当然如果有使用tomcat也可以尝试直接放在tomcat下但估计此方式并不好用以笔者的经验和实践,最好根据上面输出的路径来放置是最稳当的。

特别说明

如果在tomcat的JVM配置中存在-Djava.library.path=/usr/local/apr/lib的配置,那么需要将对应的依赖复制到java.library.path对应的路径下面。

阿里云环境特别说明

替换WEB-INF/lib文件:阿里云环境备份的项目下拿到WEB-INF/lib文件,新增或修改根据需要。有几个jar包是windows的需要替换成linux版本。痛点:每次打包后都需要替换lib包在linux平台,并且在阿里云环境请不要使用/usr/local以外的其他路径,否则引用授权无法找到*.so。

  • /usr:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为C:/Windows/System32。

  • /usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。

  • /opt:用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。

注:吐血的经验和教训 ,因为项目中有*.so的授权。

posted @ 2024-09-30 16:02  boonya  阅读(117)  评论(0)    收藏  举报  来源
我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。