明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
随笔 - 1277, 文章 - 0, 评论 - 214, 阅读 - 320万
  博客园  :: 首页  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

错误:

Tomcat 项目和supermap iserver war包中使用了相同的supermap java iobject 【四个jar 包】,实际的访问过程如下:

这时候在访问Tomcat的时候,就会出现一个错误:

an exception caught at Environment.loadLibrary(), program will continue running.
java.lang.UnsatisfiedLinkError: Native Library D:\supermap-iobjectsjava-10.2.0\objectsjava\bin\WrapjCore.dll already loaded in another classloader

 

原因:

JVM只允许一个默认的ClassLoader来load native library,并不提供专门的API来unload一个loaded native library,因此无法在我们的重启Web应用的代码中来手工清除已经load的dll,也没有相应的unload native 方法. 


解决方法:  https://www.cnblogs.com/Fooo/p/17574516.html (Tomcat引用超图java object的几个jar排除不打包)

将Tomcat引用超图java object的几个jar排除不打包,iserver解压后的war包有com.supermap.*jar放到jre安装目录下 /lib/ext或tomcat/lib下, 注意和iserver相同版本号,含小版本号

 

 

解决这个问题其实很简单,放到java的systemLoader可以加载的地方,如lib/ext目录下。然后,项目中 仍然去调用此代码。由于访问dll的代码由systemLoader加载,因此,多个项目同时访问同一个dll时,即可避免再次加载了。因为,第二个项目 在访问时,寻找到的类,已经被systemLoader加载过了,因此项目本身的classLoader就不会再去加载这个类了。

 

 

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2022-07-22 Hi,你想要的在线创建架构图都在这儿
2007-07-22 多线程调度例子·····················
点击右上角即可分享
微信分享提示