Matlab2021a打包jar包及会遇到的问题(linux、windows)

都有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完全不同。不过我个人更倾向于2021版本,因为很多2018打包出现的问题2021都解决了,而且2021打包出来的jar包大小远小于2018的。

 

  至于怎么调用,后面再写吧。

 

posted @ 2023-07-24 13:53  zgffly  阅读(366)  评论(10编辑  收藏  举报