都有chatgpt了,實在不想寫部落格....不過還是記錄一下問題吧。
我們在用matlab打包jar包的時候,經常會出現打包出錯的問題,但無非注意以下幾點就行了:
1、打包方式
這個還是很簡單的,而且linux、windows沒區別,開啟matlab命令列視窗,然後輸入deeploytool,之後會彈出來一個視窗,在彈出來的視窗選擇Library Compiler,如下:
之後會彈出來一個大視窗,用來打包的,如下:
根據圖片裡面的文字進行操作就行~然後點選右上角Package,等他打包完就行了,在生成目錄找到for_redistribution_files_only目錄,jar包就在裡面。PackagingLog.html可以看看打包紀錄檔~
2、打包問題
打包出現的問題無非就是需要注意以下幾點:
這裡指的是jdk環境環境,對於linux,就需要在/etc/profile或者~barshc檔案加jdk環境,而windows則是在系統環境變數里加jdk環境,這個一般不會出錯;
同程式碼跨平臺出現的問題基本上是由於編碼問題引起的,linux是utf8編碼,而windows是gbk編碼,當然不能通用了~網上給的教學都是什麼改matlab預設編碼,這操作真的蠢。其實編碼不同造成的影響都體現在中文上面,這說明什麼?很簡單,你只要把程式碼裡面的所有中文註釋刪掉就完事了。什麼?註釋太多了?不好刪?那麼你還可以使用下面這種方法,就是通過執行一段程式碼將你的所有程式碼轉換成無註釋程式碼,如下:
% 原始碼檔案路徑 src = 'D:/test'; % 生成程式碼路徑 resultPath = 'D:/test/utf8'; files = dir(fullfile(src)); for i = 1:length(files) if files(i).isdir == 0 filePath = [src,'/',files(i).name]; rePath=[resultPath,'/',files(i).name]; code = fileread(filePath); codeWithoutComments = mtree(code).tree2str(); fid=fopen(rePath,'a'); fprintf(fid,'%s',codeWithoutComments); fclose(fid); end end
注意:程式碼裡面所有涉及到路徑的都用\,如d:\\test應該寫成d:/test
沒錯不用懷疑,還是因為中文亂碼的問題,有些地方中文註釋影響打包了,參考上一點解決方法。
好傢伙,這問題是真頭大了,比如說我就在使用神經網路時遇到過未找到SeriesNetwork的問題,折磨了很久,後面發現應該是matlab打包後,因為SeriesNetwork是第三方工具的問題,他不會自動從環境中找到這個檔案然後打包進jar包中,所以解決辦法就出來了,那就是從matlab安裝目錄中找到未定義函數的檔案,然後複製到你的專案目錄下,就完事了。
比如我缺少的SeriesNetWork檔案路徑在:
最後要說的是:這種方式不一定適用於2021以下版本,比如2018的打包方式就與2021完全不同。