Matlab2021a打包jar包問題(linux、windows)

2023-07-24 15:01:18

都有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

  • 紀錄檔檔案PackagingLog.html報錯內容有^或者*符號,比如:* %% 瀵瑰垎鍓插悗鐨勫浘鍍忚繘琛屽鐞?

  沒錯不用懷疑,還是因為中文亂碼的問題,有些地方中文註釋影響打包了,參考上一點解決方法。

  • 打包沒問題,但是執行的時候出現未定義與 'XXX' 型別的輸入引數相對應的函數

  好傢伙,這問題是真頭大了,比如說我就在使用神經網路時遇到過未找到SeriesNetwork的問題,折磨了很久,後面發現應該是matlab打包後,因為SeriesNetwork是第三方工具的問題,他不會自動從環境中找到這個檔案然後打包進jar包中,所以解決辦法就出來了,那就是從matlab安裝目錄中找到未定義函數的檔案,然後複製到你的專案目錄下,就完事了。

  比如我缺少的SeriesNetWork檔案路徑在:

 

 

  最後要說的是:這種方式不一定適用於2021以下版本,比如2018的打包方式就與2021完全不同。