SpringBoot项目调用Matlab方法
- 需求
- 环境准备
- 步骤
- Matlab方面
- java方面
- 结果
需求
java调用matlab的函数
环境准备
Matlab,jdk,maven管理的springboot项目
步骤
Matlab方面
- 准备一个简单函数
function [x,y,z] = jarDemo(arg)
disp("hello world from matlab");
disp(arg);
x = 1;
y = 2;
z = 3;
end
- 安装
Compiler
和Compiler SDK
,如果没有的话在命令行运行deploytool
命令时会报错,会提示安装三个东西,并且点击下划线的红字可以直接打开这两个附件的安装窗口,安装即可(需要正版?) - 安装之后上方工具栏的APP下可以找到
Library Compiler
- 点击之后出现一个窗口,窗口的TYPE栏里会有各种语言的库,如果只安装了
Compiler
而没有安装Compiler SDK
的话TYPE栏只会有一个Excel Add-in
,没法用;选择Java Package,点击加号找到需要打成jar包的函数文件jarDemo.m,可以改一下类名,这个随意,最终找个文件夹导出即可
java方面
- 找到导出的文件夹下的for_redistribution_files_only\jarDemo.jar,这是一个jar包,还需要一个Matlab\toolbox\javabuilder\jar\javabuilder.jar,这两个jar包,复制一下,复制到哪里呢,springboot项目的src\resources目录下,新建一个lib目录,复制进去
右键lib目录“添加为库”,添加到项目还是模块随你,然后这项目结构-模块-依赖里就能看到添加的这个lib文件夹了,就可以在代码里import这个类了 - 新建一个测试类
import jarDemo.TestClass; // 这个是我们自己写的jarDemo.m函数
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import com.mathworks.toolbox.javabuilder.*; // 这个是必须的,对matlab的支持
public class matlabTest
{
private static final Logger log = LoggerFactory.getLogger(matlabTest.class);
@Test
public void test1() {
log.info("开始运行");
try {
TestClass t = new TestClass();
Object[] result = t.jarDemo(3, "ok?"); //第一个参数是指定返回结果的个数;第二个参数起是传入matlab函数的参数,多个用逗号隔开。
for (Object obj : result){
log.info(obj.toString());
}
} catch (MWException e) {
e.printStackTrace();
}
log.info("运行结束");
}
}
结果
jarDemo.m里的disp在IDEA控制台输出了,t.jarDemo()的第二个参数"ok?"也传到了matlab代码里,也disp了,返回的三个结果x,y,z也打印出来了