聊聊開源 IoT平臺ThingsBoard3.3.4源碼編譯問題記錄
ThingsBoard 是一個基于Java的開源的物聯網平臺,用于數據收集、處理、可視化和設備管理。它使用物聯網行業的標準協議(MQTT、CoAP和HTTP)實現設備連接,并支持云和本地部署。因為手頭有項目用這個開源產品當作物聯網數據采集傳輸代平臺,用來代替以前公司自己開發的的數據采集傳輸軟件(不穩定)。根據近兩年來的項目實際使用經驗,ThingsBoard是一款很優秀的產品,其高連接性,可靠性,穩定性,可伸縮性,可擴展性等指標都可以秒殺我們公司自研的基于c++的那套系統。
最近ThingsBoard相關項目部署在某央企云平臺上,該云平臺安全機制實時檢查軟件漏洞,發現漏洞限期整改,否則關停服務器。ThingsBoard源碼中引用300多個第三方jar包,經常會有組件出現漏洞,靠等待官方升級根本來不及。只能自己靠自己源代碼編譯打包發布,編譯源碼一大堆的坑,把遇到的問題總結記錄下來供大家參考。
1、Maven配置問題
因為ThingsBoard在編譯過程中需要依賴很多國外的包,那么需要外網才能連接,建議連接到外網。如果公司設置內有代理服務器,別忘了setting.xml配置代理訪問。
一般情況下,使用官方鏡像更新依賴包,網速不穩定,可將Maven鏡像源設置為淘寶的,在maven安裝包目錄下找到settings.xml設置,如下:
建議同時把npm也設置為淘寶鏡像。
同上,網速不好npm過程中也會下載失敗,這是導致很多人編譯失敗的原因,所以我們在進行編譯之前,也將npm替換為淘寶鏡像:
編譯時把系統代理服務器設置或IE代理服務器設置中的代理設置取消,經常導致 ThingsBoard Server UI模塊編譯失敗。
2、緩存、或進程未關閉、或文件被占用導致編譯出錯
每次編譯失敗進行二次編譯時,要清理緩存,并殺死遺留進程
執行下面命令,殺死遺留進程
taskkill /f /im java.exe
或者IDEA Maven工具進行清理。
在項目編譯過程中要copy文件,如果node進程或其它進程沒有關閉,也會報各種類型的錯誤信息。進入報錯的模塊,單獨編譯,添加參數 -X或-e 查詢出錯的具體信息,根據錯誤提示進行處理。
最簡單的方式就是重啟電腦,建議重啟。
3、軟件版本問題,這是最常見的問題
Java版本,JDK版本必須11以上版本,我用的版本是11.0.18,最開始用的JDK11_4335520這個版本編譯時發現各種錯誤。
再就是Node版本,我用的v16.15.1,NPM版本號,8.5.0
最后時yarn版本,v1.22.9。
node和yarn版本最好跟模塊pom文件設置版本中保持一致。
注意:
編譯項目跟網速和電腦配置有關,最好連接上外網進行編譯,我這里完整編譯大概需要20多分鐘。
總結
在編譯Thingsboard 3.3.4過程中遇到了各式各樣的問題,編譯過程很慢,50多個模塊花費了幾乎一整天的時間才編譯成功,在此總結一下,也希望能幫助到更多朋友。