問題描述:
開發了一個需要調用dll的java web程序,在idea開發環境下運行調試沒問題,可以正常運行,在tomcat/bin下,運行批處理startup.bat,啟動tomcat服務器,也可以正常運行。唯獨在windows service方式下,使用啟動服務的方式,運行tomcat/webapps/下的web程序,不需要調用dll的邏輯,運行正常,但是包含需要調用第三方dll的地方,就報錯誤,提示 在jre/bin的目錄下找不到dll,明明dll就在這個目錄下。這個問題困惑了好幾天。
提前說明:配置了JAVA_HOME\JRE_HOME環境變量。
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_131
JRE_HOME=C:\Program Files\Java\jdk1.8.0_131\jre
最終的解決辦法:
說法一:把依賴的dll放在Tomcat安裝目錄的bin文件夾,與startup.bat處於同級目錄下才可以加載dll成功。這是我最后采用的方式。也是唯一可以使用的方法。(
針對我的環境是這樣,windows下是這樣的,linux下,還沒測試,網上說,Linux下,將文件放在 /user/local/bin 中,linux中jar依賴的是so文件)
在此鳴謝一下這幾篇文章的作者
參考了很多文章,都不行:
1.在基於tomcat的web project中加載dll文件的方法(來源於實際項目經驗) 這篇文章直接解決了我的問題,把dll直接copy到tomcat/bin目錄下,也就是tomcat運行的起始目錄下。
2.Java工作筆記:部署Tomcat時使用jni和jna調用DLL文件的問題,參見第五條。
3.Java加載dll或so庫文件的路徑 java.library.path (擴展視野,本次沒起到什么用處)