最近在做一个项目,要将Matlab代码打包成jar包,供java调用。记录一下过程,有什么不对的地方欢迎大家指出。
我下载的是matlab2019a版本,java代码使用的是IntelliJ IDEA。
1、首先确认一下matlab中使用的jdk版本,再看看自己电脑中安装的jdk版本是多少,必须要保持两者的版本是一致的,不然打jar包的时候会报错。
查看matlab的jdk版本命令,在matlab命令行窗口中输入:version -java
我的版本是1.8的。但是我电脑中安装的jdk版本是14.0的,所以我需要再安装一个1.8的版本。首先去Oracle官网上下载1.8的jdk。下载过程自行百度。下载完之后按照提示安装即可。安装完了需要配置环境变量。
2、现在我电脑上有两个版本的jdk,一个是1.8,一个是14.0。要把环境变量中的jdk版本设置为1.8的。
第一步:打开环境变量的编辑界面。
第二步:添加变量名:CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar。变量值一定要写准确了,不要漏掉前面的小点,写完之后点击确认按钮。
第三步:我之前配置的jdk版本是14.0,要切换成1.8的版本,不需要删掉14.0的,只需要做一下修改即可:
14的jdk版本变量名设置为:JAVA_HOME_IDEA ,变量值为:14版本的jdk安装路径。
1.8的jdk版本变量名设置为:JAVA_HOME_MATLAB,变量值为:1.8版本的安装路径。
(注:有几个jdk就配几个变量,比如我的电脑上有2个版本的jdk)
根据不同需求可以直接更改JAVA_HOME的变量的值即可,当前我是使用的是1.8的jdk版本,所以设置JAVA_HOME的值为:%JAVA_HOME_MATLAB%\,如果后面想用14的jdk版本了,那就修改一下JAVA_HOME的变量值为%JAVA_HOME_IDEA%\即可。
第四步:编辑系统变量中的Path
将%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin添加到Path中。
第五步:设置完成后,在cmd窗口输入命令行java -version,查看jdk版本是否为想用的版本。
第六步:环境变量配置成功后,因为matlab中默认载入启动时的jdk版本,所以务必重启matlab之后再次在matlab的命令行窗口中输入version -java,才能配置成功!!一定要重启!系统jdk才能和matlab中的版本匹配!
3、将matlab代码打成jar包
第一步:在matlab命令行窗口中输入deploytool,会出现下面的提示:
刚安装matlab的话,可能不会跳出这个窗口,而是提示缺少Compiler,那就先去安装一下。
点击主页的附加功能中下拉箭头,点击获取附加功能
在搜索框里搜索MATLAB Compiler SDK,搜索结果第一个要找安装的功能
安装完成之后,再次在matlab的命令行窗口中输入deploytool就可以了。点击Library Compiler。
第二步:
1:选择Java Package
2:将要打包的matlab文件加载进来,只能加载.m格式的文件
3:包名,可以自由修改
4:类名,可以自由修改
5:点击右上角的Package按钮
打包成功后会弹出下面这样的界面,如果打包失败了,一般都是因为电脑上配置的jdk版本和matlab需要的jdk版本不一致导致的,其他问题我暂时没有遇到过。
4、将jar包导入到java程序中
打包成功之后会生成一个文件夹,文件夹的名字就是之前写的包名,打开这个文件夹,里面有一个文件夹,名字为:for_redistribution_files_only。继续打开这个文件夹,里面会有一个jar包,名字为之前写的包名。
另外去Matlab安装路径下,MATLAB – >R2019a – >toolbox – >javabuilder – >jar,找个一个名为"javabuilder"的bar包。
将这两个jar包导入到java中
注:IDEA本身需要加载一个jdk,我的是14版本,这个版本无须跟matlab中的jdk版本保持一致。
5、接下来就可以编写代码了,直接在java代码中导入这两个包即可。
然后就可以使用了。
题外话:若matlab中函数的输入参数需要一个数组,所以在java中调用这个函数的时候也需要输入一个数组,但是不能是普通的java数组,需要转换成能被matlab使用的形式,如下所示:
参考:
https://www.jianshu.com/p/8a0f968fca39