使用 MATLAB Data API 将 MATLAB 函数部署到 Java 应用程序中,用于 Java
此示例演示了如何打包一个 MATLAB® 函数,并将其部署到 Java® 应用程序中。Windows®、Linux® 和 macOS 系统支持此工作流。本示例使用基于 Windows 工作流。
前提条件
创建一个对 MATLAB 搜索路径可见的新工作文件夹。此示例使用名为
work的文件夹。请确认您已搭建好 Java 开发环境。有关详细信息,请参阅 设置 Java 开发环境。
请确认您已满足所有 MATLAB Compiler SDK™ Java 目标要求。有关详细信息,请参阅 MATLAB Compiler SDK Java 目标要求。
最终用户必须安装 MATLAB Runtime 才能运行应用程序。有关详细信息,请参阅下载并安装 MATLAB Runtime。
出于测试目的,您可以使用安装的 MATLAB 来代替 MATLAB Runtime。
数据管理
要在已部署的 MATLAB 代码与 Java 应用程序之间交换数据,请使用适用于 Java 的 MATLAB Data API。MATLAB 引擎也使用此 API。有关详细信息,请参阅 Java Data Type Conversions。
创建 MATLAB 函数
使用以下代码创建一个名为 calculateDistance.m 的 MATLAB 文件:
function distance = calculateDistance(p1, p2) % This function calculates the Euclidean distance between two points % Inputs: % p1 - a two-element vector [x, y] % p2 - a two-element vector [x, y] % Output: % distance - the Euclidean distance between p1 and p2 % Calculte Euclidean distance diff = p1 - p2; diffSq = diff.^2; sumSq = sum(diffSq); distance = sqrt(sumSq); end
使用 compiler.build.javaPackage 创建 Java 包
使用 compiler.build.javaPackage 函数,根据 MATLAB 函数生成的数据生成代码存档(.ctf 文件)。
buildResults = compiler.build.javaPackage( ... "calculateDistance.m",... Interface="matlab-data",... Verbose="on", OutputDir=".\output",.... PackageName="com.example.matlabfunction")
尽管在 compiler.build.javaPackage 函数中指定 PackageName 并非强制要求,但强烈建议您指定。指定包名可以使生成的代码拥有更简洁、更易预测的 Java 命名空间。如果省略该参数,系统将使用名为 example 的默认根包,这可能会导致您的 Java 应用程序的包结构杂乱无章或令人困惑。
当您将 MATLAB 函数打包以供 Java 集成时,该过程会在您指定的输出目录中生成多个文件。其中,Java 集成所需的唯一关键文件是代码存档(.ctf 文件),其中包含您打包的 MATLAB 代码和资源。有关其他文件的详细信息,请参阅 打包 MATLAB 函数后生成的文件。
P:\MATLAB\WORK\OUTPUT
mccExcludedFiles.log
unresolvedSymbols.txt
matlabfunction.ctf
readme.txt
includedSupportPackages.txt
requiredMCRProducts.txt
buildresult.json
GettingStarted.html
No subfolders exist在使用 MATLAB Data API 处理 Java 时,compiler.build.javaPackage 函数会生成一个 .ctf 文件,但不会生成包含 Java 包装器的 JAR 文件。有关详细信息,请参阅 MATLAB Data API for Java 工作流。
将 MATLAB 代码集成到 Java 应用程序中
您可以在自己偏好的 Java 开发环境中完成集成过程,包括使用文本编辑器配合 Java 开发工具包 (JDK) 的命令行工具,或者在 Windows、macOS 和 Linux 上使用 IntelliJ IDEA 和 Visual Studio Code 等替代方案。有关详细信息,请参阅 设置 Java 开发环境。
使用 Java 命令行 API 构建应用程序
使用以下代码创建一个名为
Distance.java的 Java 驱动应用程序:创建该文件后,生成的目录结构如下:
work/ ├── Distance.java └── output/ ├── matlabfunction.ctf └── ...通过将类路径设置为包含
matlabruntime.jar来编译您的 Java 代码。set MATLABROOT=C:\Program Files\MATLAB\R2026a javac -classpath ".;%MATLABROOT%\toolbox\javabuilder\jar\matlabruntime.jar" Distance.java通过将类路径设置为包含
matlabruntime.jar,并配置对本机运行时库的访问权限,来运行您的 Java 应用程序。有关详细信息,请参阅 设置 MATLAB 库路径以测试已部署的应用程序。java -classpath ".;%MATLABROOT%\toolbox\javabuilder\jar\matlabruntime.jar" DistanceEuclidean Distance between [0, 0] and [3, 4] is 5.0
如果在未设置环境变量以访问来自 MATLAB 或 MATLAB Runtime 的本机运行时库的情况下运行 Java 应用程序,将会导致
java.lang.UnsatisfiedLinkError。注意
在安装了完整 MATLAB 版本的计算机上测试应用程序时,您可以使用 MATLAB 安装来配置对原生库的访问。
在使用 MATLAB Runtime 的部署场景中,您必须在 MATLAB Runtime 的安装目录中明确指定本机库的位置。这种区分确保了已部署的应用程序能够独立于完整的 MATLAB 安装环境运行。
有关详细信息,请参阅:
另请参阅
compiler.build.javaPackage | compiler.build.JavaPackageOptions | com.mathworks.runtime.MatlabRuntime
