为什么在 Java 中调用 MATLAB 函数?
最近在做复杂网络仿真平台时,需要在 Java 环境中调用一些 MATLAB 编写的算法函数。这些函数在matlab中已经调试好经过了验证,就不想在java换再实现一套同样的逻辑。
一开始以为会很麻烦,后来发现 MATLAB 官方其实提供了完整的 Java 支持。其实就是用 MATLAB Compiler SDK 就能直接导出 .jar 文件,然后在 Java 项目中调用。然后配置好环境就可以轻松运行了。
这篇文章记录完整流程:
- MATLAB 如何导出 jar
- 本地如何配置运行环境
- 服务器端如何部署(含 MATLAB Runtime)
一、MATLAB 导出 jar 包
MATLAB 自带 Compiler SDK,可以把 .m 文件打包成 Java 可调用的 jar。
示例函数:
1 | % add.m |
然后在当前函数(add.m)文件下 在 MATLAB 的命令行执行:
1 | mcc -W 'java:addClass,AddClass' -T link:lib add.m |
执行后会生成:
AddClass.jarAddClass.ctf- 以及
for_testing文件夹等辅助内容
二、本地环境配置(Java 调用)
在本地 Java 项目中使用刚生成的 jar。
假设使用 IntelliJ IDEA。
1. 导入文件
将 AddClass.jar、AddClass.ctf 放到工程文件夹下的 libs/ 文件夹。
2. 添加依赖
添加 MATLAB runtime 依赖 javabuilder.jar:
示例位置
1 | C:\Program Files\MATLAB\R2023a\toolbox\javabuilder\jar\javabuilder.jar |
Maven:根据你的项目结构和具体javabuilder.jar位置,添加如下依赖
1 | <dependency> |
Gradle:
根据你的项目结构和具体javabuilder.jar位置,添加如下依赖:
1 | dependencies { |
3. Java 调用代码
1 | import addClass.AddClass; |
4. 环境变量
MATLAB Runtime (MCR) 必需。
若未安装 MATLAB,则需单独安装对应版本。
下载地址:
https://www.mathworks.com/products/compiler/matlab-runtime.html
然后配置路径
1 | set PATH=%PATH%;C:\Program Files\MATLAB\MATLAB Runtime\v910\runtime\win64 |
三、服务器部署(Linux 环境)
1. 安装 MATLAB Runtime
下载地址:
https://www.mathworks.com/products/compiler/matlab-runtime.html
选择与打包版本匹配的 runtime版本,例如 R2023a → v910。
安装路径示例:/usr/local/MATLAB/MATLAB_Runtime/v910/
2. 配置环境变量
编辑 /etc/profile:
1 | export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/MATLAB/MATLAB_Runtime/v910/runtime/glnxa64 |
执行 source /etc/profile。
3. 运行 Java 程序
1 | java -cp .:AddClass.jar:/usr/local/MATLAB/MATLAB_Runtime/v910/java/jar/javabuilder.jar TestMatlab |
输出:
1 | Result = 3.0 |
我当时是使用docker构建镜像的,遇到了好几个问题,最后Dockerfile 部分内容如下:
1 | # ------------------------------ |
四、常见问题
| 问题 | 原因 | 解决办法 |
|---|---|---|
| java.lang.UnsatisfiedLinkError | Runtime 库未配置 | 检查 LD_LIBRARY_PATH |
| Could not find library mclmcrrt9_10.dll | MCR 未安装或版本不匹配 | 安装对应版本 MCR |
| ClassNotFoundException | jar 路径错误 | 检查 classpath |
| 输出为空或异常退出 | CTF 路径错误 | 保证 .ctf 文件与 jar 同目录 |
五、总结
虽然也是踩坑了,不过整个过程其实不复杂:
- MATLAB 打包 jar
- Java 添加依赖
- 安装并配置 Runtime
- 成功运行
如果部署在服务器上,建议把 MATLAB 模块单独封装成服务(如 Flask / SpringBoot 接口),通过 HTTP 调用,这样更容易维护和扩展。
感谢大家的观看,希望这篇文章能帮到有类似需求的朋友!