目前我使用spring mvc开发了一个java web应用程序,netbeans开发为IDE,tomcat开发为web服务器。
我想使用第三方jar,当我在简单的java应用程序中使用jar时似乎没有问题。但是当我在我的webapp中使用它时,它会触发错误,这是错误消息:
Caused by: java.lang.UnsatisfiedLinkError: Native Library C:\Program Files (x86)\SafeNet\Protect Toolkit C SDK\bin\jcprov.dll already loaded in another classloader
这是调用jar中的类的代码:
CryptokiEx.C_Initialize(new CK_C_INITIALIZE_ARGS(CKF.OS_LOCKING_OK));
//below code cause error
CryptokiEx.C_OpenSession(0, CKF.RW_SESSION, null, null, session);
代码的第二行将导致错误。
第一次执行代码时,它没有触发错误,之后buat,它总是触发错误。我试图从netbeans停止tomcat,关闭netbeans并再次重新打开,它仍然会触发错误。
我用Google搜索答案,它指出了这个链接:
但是它说加载本机库的类应放在$ CATALINA_HOME / shared / lib中。我将jar放在目录中,但错误仍然存在。
然后我在命令行运行:mvn tomcat:在我的项目目录上运行,这次没有发生错误,我不知道为什么。但是,我仍然希望从netbeans运行它,而不是从命令行运行它。
我假设即使我已将jar放在共享$ CATALINA_HOME / shared / lib中,我的webapp仍然依赖于放在我的webapp项目的lib文件夹中的jar,而不是放在$ CATALINA_HOME / shared / lib中的jar 。我使用项目内存储库来包含jar,但是如何包含放在$ CATALINA_HOME / shared / lib中的jar?
我真的很感谢你们的任何帮助, 谢谢!
答案 0 :(得分:0)
甚至可以a static-dll-bootstrapper project以适当的方式完成所有事情。
只需几个简单的步骤即可解决您的麻烦。
dll-bootstrapper.properties
中定义lib名称
Class.forName("msm.DLLBootstrapper");
放在项目代码中