本文包含知識點:
一、matlab程序打包成jar包
二、Maven添加本地jar包到repository倉庫
三、java調用matlab函數範例
Part 1:matlab打包jar包
1、需保持matlab和java開發環境所使用的jdk版本一致
matlab中查看jdk版本命令如下:
>> getenv JAVA_HOME
ans =
'C:\Java\jdk1.8.0_161'
2、matlab打jar包方式如下:
菜單位置:APP-->Library Compiler:
參數設置:
1、TYPE:java package
2、EXPORTED FUNCTIONS:選擇需要通過java調用的函數
3、PACKAGING OPTIONS:選中Runtime downloaded from web
4、Library infomation:默認值即可
5、Class Name:默認爲Class1,雙擊可修改
6、以上設置完成後,點擊右上角的Package按鈕(背景圖爲勾),安靜等待片刻即可完成
7、完成後,會默認打開輸出目錄,找到\matlab\for_testing\matlab.jar,按下文步驟導入java環境即可。
參考圖如下:
Part 2:Maven添加本地jar包到repository倉庫
1、打開cmd,進入jar包所在目錄
2、執行以下命令進行安裝
1)、javabuilder包(必須,執行時依賴此包)
重點:mvn install:install-file -Dfile=javabuilder.jar -DgroupId=com.matlab.javabuilder -DartifactId=javabuilder -Dversion=1.1.0 -Dpackaging=jar
需注意,每個參數前都帶有"-D"。
D:\Program Files (x86)\MATLAB\R2018a\toolbox\javabuilder\jar>mvn install:install-file -Dfile=javabuilder.jar -DgroupId=com.matlab.javabuilder -DartifactId=javabuilder -Dversion=1.1.0 -Dpackaging=jar
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ standalone-pom ---
[INFO] Installing D:\Program Files (x86)\MATLAB\R2018a\toolbox\javabuilder\jar\javabuilder.jar to C:\Users\li\.m2\repository\com\matlab\javabuilder\javabuilder\1.1.0\javabuilder-1.1.0.jar
[INFO] Installing C:\Users\li\AppData\Local\Temp\mvninstall2898445655770503508.pom to C:\Users\li\.m2\repository\com\matlab\javabuilder\javabuilder\1.1.0\javabuilder-1.1.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.531 s
[INFO] Finished at: 2019-03-05T10:13:08+08:00
[INFO] Final Memory: 6M/121M
[INFO] ------------------------------------------------------------------------
2)、特定業務函數jar包
D:\Program Files (x86)\MATLAB\R2018a\toolbox\javabuilder\jar>mvn install:install-file -Dfile=matlabtest.jar -DgroupId=com.matlab.test -DartifactId=matlabtest -Dversion=1.1.0 -Dpackaging=jar
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ standalone-pom ---
[INFO] Installing D:\Program Files (x86)\MATLAB\R2018a\toolbox\javabuilder\jar\matlabtest.jar to C:\Users\li\.m2\repository\com\matlab\test\matlabtest\1.1.0\matlabtest-1.1.0.jar
[INFO] Installing C:\Users\li\AppData\Local\Temp\mvninstall7620595511020354694.pom to C:\Users\li\.m2\repository\com\matlab\test\matlabtest\1.1.0\matlabtest-1.1.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.397 s
[INFO] Finished at: 2019-03-05T10:16:00+08:00
[INFO] Final Memory: 6M/153M
[INFO] ------------------------------------------------------------------------
D:\Program Files (x86)\MATLAB\R2018a\toolbox\javabuilder\jar>
3、在pom.xml中引入jar包
<!-- 調用matlab start-->
<dependency>
<groupId>com.matlab.javabuilder</groupId> <!--自定義-->
<artifactId>javabuilder</artifactId> <!--自定義-->
<version>1.1.0</version> <!--自定義-->
</dependency>
<dependency>
<groupId>com.matlab.test</groupId> <!--自定義-->
<artifactId>matlabtest</artifactId> <!--自定義-->
<version>1.1.0</version> <!--自定義-->
</dependency>
<!-- 調用matlab end-->
Part 3:編寫java端調用代碼(以下內容來源:https://blog.csdn.net/jinliwei1990/article/details/55505133,感謝原創!)
package com.demo.matlab;
import com.mathworks.toolbox.javabuilder.MWException;//必須
import com.mathworks.toolbox.javabuilder.MWNumericArray;//必須
import matlab.matlab;//必須
/**
* TO-DO:
* Created by lidh on ${date} 10:06.
* Company: LMT Co.,Ltd.
*/
public class MatlabTest {
public static void main(String[] args) {
//java調用matlab方法
//matlab方法爲[sum,m] = add(a,b)
//java中方法爲matlab實例的方法matlab.add(int,object...),返回值爲object[]
//其中輸入的int爲輸出的個數,object...爲輸入參數,返回值object[]爲輸出的集合
matlab matlab;//定義matlab類型
try {
matlab = new matlab();//實例化方法集合
int[][] a = new int[][]{{1, 0},{0,1}};//定義輸入參數
int[][] b = new int[][]{{3, 2},{1,4}};//定義輸入參數
Object[] rs = matlab.add(2,a,b);//調用方法1,方法1中調用方法2
System.out.println("輸出結果1:");
System.out.println(rs[0]);
MWNumericArray is = (MWNumericArray) rs[0];//轉爲matlab格式矩陣
System.out.println("輸出第2行第2列數值:");
System.out.println(is.getInt(new int[]{2,2}));
System.out.println("輸出結果2:");
System.out.println(rs[1]);
System.out.println("輸出調用方法2的結果:");
System.out.println(matlab.ims(1, 12,3)[0]);//調用方法2
} catch (MWException e) {
e.printStackTrace();
}
}
}
運行結果:
輸出結果1:
3 0
0 4
輸出第2行第2列數值:
4
輸出結果2:
4 2
1 5
輸出調用方法2的結果:
15