掉坑了,小烏龜SVN預設提交的檔案竟然不含 .so

2020-10-21 12:00:37

背景

發現一個小問題,歸檔專案部署包中竟然沒有第三方 JNI 庫,它是一個用 C 語言實現的 .so 檔案。這導致專案部署的時候報 JNI 載入失敗錯誤,具體怎麼回事兒呢?

載入 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 上傳的問題。

驗證 SVN 對 so 檔案的行為

驗證了一下,新增五個檔案,三種不同型別,右鍵「commit" 操作時,無版本的新檔案中只有兩個:
在這裡插入圖片描述
問題根源,右鍵 SVN 設定資訊,ignore 列表中包含了幾種:
在這裡插入圖片描述

解決辦法

移除上述紅框中的 *.so 設定即可:
在這裡插入圖片描述

啟示錄

為什麼預設檔案排除了 .so 檔案呢?可能是為了安全吧,自定義庫畢竟是外來的,不一定靠譜。

大概現在用 SVN 的公司很稀少了吧,前兩天有網友評論說還用 SVN 的公司,技術應該也很落後。工具也存在鄙視鏈啊,看來我也得補充一點 Git 的知識了!