最近在做一个项目,要将Matlab代码打包成jar包,供java调用。记录一下过程,有什么不对的地方欢迎大家指出。

我下载的是matlab2019a版本,java代码使用的是IntelliJ IDEA。

1、首先确认一下matlab中使用的jdk版本,再看看自己电脑中安装的jdk版本是多少,必须要保持两者的版本是一致的,不然打jar包的时候会报错。

查看matlab的jdk版本命令,在matlab命令行窗口中输入:version -java

修改matlab的java matlab代码转java_jar包


我的版本是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。变量值一定要写准确了,不要漏掉前面的小点,写完之后点击确认按钮。

修改matlab的java matlab代码转java_修改matlab的java_02


第三步:我之前配置的jdk版本是14.0,要切换成1.8的版本,不需要删掉14.0的,只需要做一下修改即可:

修改matlab的java matlab代码转java_修改matlab的java_03


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

修改matlab的java matlab代码转java_jar包_04


将%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin添加到Path中。

修改matlab的java matlab代码转java_java_05


第五步:设置完成后,在cmd窗口输入命令行java -version,查看jdk版本是否为想用的版本。

修改matlab的java matlab代码转java_jar包_06


第六步:环境变量配置成功后,因为matlab中默认载入启动时的jdk版本,所以务必重启matlab之后再次在matlab的命令行窗口中输入version -java,才能配置成功!!一定要重启!系统jdk才能和matlab中的版本匹配!

3、将matlab代码打成jar包

第一步:在matlab命令行窗口中输入deploytool,会出现下面的提示:

修改matlab的java matlab代码转java_jar包_07

刚安装matlab的话,可能不会跳出这个窗口,而是提示缺少Compiler,那就先去安装一下。

点击主页的附加功能中下拉箭头,点击获取附加功能

修改matlab的java matlab代码转java_修改matlab的java_08

在搜索框里搜索MATLAB Compiler SDK,搜索结果第一个要找安装的功能

修改matlab的java matlab代码转java_jar包_09

安装完成之后,再次在matlab的命令行窗口中输入deploytool就可以了。点击Library Compiler。

修改matlab的java matlab代码转java_jar包_10

第二步:

1:选择Java Package
2:将要打包的matlab文件加载进来,只能加载.m格式的文件
3:包名,可以自由修改
4:类名,可以自由修改
5:点击右上角的Package按钮

修改matlab的java matlab代码转java_JAVA_11


打包成功后会弹出下面这样的界面,如果打包失败了,一般都是因为电脑上配置的jdk版本和matlab需要的jdk版本不一致导致的,其他问题我暂时没有遇到过。

修改matlab的java matlab代码转java_jar包_12


4、将jar包导入到java程序中

打包成功之后会生成一个文件夹,文件夹的名字就是之前写的包名,打开这个文件夹,里面有一个文件夹,名字为:for_redistribution_files_only。继续打开这个文件夹,里面会有一个jar包,名字为之前写的包名。

修改matlab的java matlab代码转java_java_13


另外去Matlab安装路径下,MATLAB – >R2019a – >toolbox – >javabuilder – >jar,找个一个名为"javabuilder"的bar包。

修改matlab的java matlab代码转java_jar包_14


将这两个jar包导入到java中

修改matlab的java matlab代码转java_java_15

注:IDEA本身需要加载一个jdk,我的是14版本,这个版本无须跟matlab中的jdk版本保持一致。

5、接下来就可以编写代码了,直接在java代码中导入这两个包即可。

修改matlab的java matlab代码转java_java_16


然后就可以使用了。

题外话:若matlab中函数的输入参数需要一个数组,所以在java中调用这个函数的时候也需要输入一个数组,但是不能是普通的java数组,需要转换成能被matlab使用的形式,如下所示:

修改matlab的java matlab代码转java_jar包_17

参考:

https://www.jianshu.com/p/8a0f968fca39