發現一個小問題,歸檔專案部署包中竟然沒有第三方 JNI 庫,它是一個用 C 語言實現的 .so
檔案。這導致專案部署的時候報 JNI 載入失敗錯誤,具體怎麼回事兒呢?
有一個專案的許可權校驗功能為了增加一點點可靠性,而採用 C 實現的。雖然 C 也能反編譯,但是多少增加了一點成本,所以心理感覺還是靠譜一點。C 編譯後的庫函數是一個 .so
檔案,放在專案 bin 目錄下。
昨天從 SVN 檢出部署包部署時,應用報了一個錯:
java.lang.UnsatisfiedLinkError: Can't load library: /app/bin/xxx.so
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1086)
定位發現 bin 目錄下沒有 .so
庫檔案,懷疑是 SVN 上傳的問題。
驗證了一下,新增五個檔案,三種不同型別,右鍵「commit" 操作時,無版本的新檔案中只有兩個:
問題根源,右鍵 SVN 設定資訊,ignore 列表中包含了幾種:
移除上述紅框中的 *.so
設定即可:
為什麼預設檔案排除了 .so
檔案呢?可能是為了安全吧,自定義庫畢竟是外來的,不一定靠譜。
大概現在用 SVN 的公司很稀少了吧,前兩天有網友評論說還用 SVN 的公司,技術應該也很落後。工具也存在鄙視鏈啊,看來我也得補充一點 Git 的知識了!