将企业微信提供的linux和windows的sdk文件解压,将里面的dll、so、java文件放到src/main/java目录下,如下图所示
参考https://zhuanlan.zhihu.com/p/37686736x修改pom文件将dll和so文件打包进jar
然后更改Finance的static代码块:
static {
if (isWindows()) {
String path = Finance.class.getResource("").getPath().replaceAll("%20", " ").replaceFirst("/", "").replace("/", "\\\\");
//加载顺序不要变
System.load(path.concat("libeay32.dll"));
System.load(path.concat("libprotobuf.dll"));
System.load(path.concat("ssleay32.dll"));
System.load(path.concat("libcurl.dll"));
System.load(path.concat("WeWorkFinanceSdk.dll"));
} else {
String path = Finance.class.getResource("").getPath();
System.load(path.concat("libWeWorkFinanceSdk_Java.so"));
}
}
public static boolean isWindows() {
String osName = System.getProperties().getProperty("os.name");
System.out.println("current system is " + osName);
return osName.toUpperCase().indexOf("WINDOWS") != -1;
}
https://github.com/yang2wuhen/work_wx springboot集成企业微信包括会话存档,有问题可以联系 15901154143
在linux环境下使用springboot项目jar包运行时,如果打包运行so文件一直报错,可以直接把so文件存放到外部某个文件夹下面,亲测可用
String path = "你存放so文件夹的位置,不要压缩!!!"; System.load(path + "/libWeWorkFinanceSdk_Java.so");
一直报这两个错,我自己摸索了2天,看到这个帖子,然后总算是弄好了。还是这个帖子给我启发,在此谢谢!
自己踩过的坑,以免大家再踩,所以我总结一下。
第一个错,是因为修改了Finance.java所在包的位置,Finance.java必须要在com.tencent.wework 路径下面。
第二个错,是因为在Finance.java中添加了自己的方法。
照这个方式打包后确实报了要求绝对路径的问题,按照6楼的方法可以解决
1.1 版
请问win下使用多模块加载,dll在子模块的jar包下,加载时报 UnsatisfiedLinkError,要求使用绝对路径怎么解决?怀疑是路径里的 **\\**.jar!\\**解析不了
https://blog.csdn.net/weixin_43303530/article/details/113502475
把资源放在这个位置之后就开始报错
no WeWorkFinanceSdk in java.library.path
war包打包有啥需要注意的么
建议自己封装一个类,在这个类中加载动态库。Windows环境下,所有dll文件放到服务的根目录下面,Linux环境下,libWeWorkFinanceSdk_Java.so文件放到jar包相同的目录就行。
/** *@Description: sdk初始化 *@Param: *@return: *@Author: zhanghu *@date: 2020/9/17 */ public int Init() { LoadDll(); sdk = Finance.NewSdk(); int ret = Finance.Init(sdk, "*****", "*****"); if (ret != 0) return ret; return 0; } /** *@Description: 动态加载微信sdk动态库 *@Param: *@return: *@Author: zhanghu *@date: 2020/9/17 */ private void LoadDll() { String path = getPath(); if (isWindows()) { //加载顺序不要变 System.load(path.concat("libeay32.dll")); System.load(path.concat("libprotobuf.dll")); System.load(path.concat("ssleay32.dll")); System.load(path.concat("libcurl.dll")); System.load(path.concat("WeWorkFinanceSdk.dll")); } else { System.load(path + "/libWeWorkFinanceSdk_Java.so"); } } public static boolean isWindows() { String osName = System.getProperties().getProperty("os.name"); System.out.println("current system is " + osName); return osName.toUpperCase().indexOf("WINDOWS") != -1; } /** *@Description: 获取当前运行目录 *@Param: *@return: *@Author: zhanghu *@date: 2020/9/17 */ public String getPath() { String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); if(System.getProperty("os.name").contains("dows")) { path = path.substring(1,path.length()); } if(path.contains("jar")) { path = path.substring(0,path.lastIndexOf(".")); return path.substring(0,path.lastIndexOf("/")); } return path.replace("target/classes/", ""); }