首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Matlab 與 Java 混合編程 JDK 版本不一致導致 deploywhich 錯誤解決

     編輯:Java 相關知識

Matlab Compiler 產生的 JAR 在 Tomcat 中調用時,若編譯環境與運行環境 JDK 版本不一致,會拋出 Undefined function or method 'deploywhich' 錯誤。

錯誤現象


??? Error using ==> print at 310
Undefined function or method 'deploywhich' for input arguments of type 'char'.
Matlab M-code Stack Trace ...
file /opt/MATLAB/MATLAB_Compiler_Runtime/v78/toolbox/matlab/graphics/print.m, line 310.

根因分析

  • Matlab Compiler Runtime (MCR) 版本綁定特定 JDK
  • Tomcat 運行的 JDK 與 Matlab 編譯時使用的 JDK 不同
  • MCR 內部類載入/反射機制對 JDK 版本敏感

解決方案

  1. 確認 Tomcat 運行的 JDK 版本:java -version
  2. 在 Matlab 編譯機器上安裝相同版本 JDK
  3. 配置 Matlab 使用該 JDK:setenv('MW_JAVA_HOME', '/path/to/jdk') 或修改 matlabroot/bin/javaclasspath.txt
  4. 重新編譯專案產生 JAR
  5. 部署至 Tomcat 驗證

最佳實踐

  • 建立專用編譯環境,JDK 版本與生產環境強制一致
  • 使用建構腳本鎖定 JDK 版本(Maven maven.compiler.source/target、Gradle sourceCompatibility/targetCompatibility)
  • 容器化部署時,基礎鏡像統一 JDK 版本
  • MCR 版本升級時,同步更新編譯/運行環境 JDK

版本對照參考

Matlab 版本MCR 版本建議 JDK
R2014av83JDK 7
R2015bv90JDK 8
R2018av94JDK 8
R2020a+v98+JDK 8/11
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved