我试图通过Datafeed工具箱编译使用Bloomberg的APIv3的MATLAB代码。代码在MATLAB中运行良好。编译器在没有Java的代码上工作正常。 javaclasspath通过以下方式引用API:
DYNAMIC JAVA PATH
C:\blpv3\API\APIv3\JavaAPI\v3.7.1.1\lib\blpapi3.jar
我在编译时得到了几个与Java相关的编译错误(下面的堆栈跟踪):
mcc -m -R -startmsg -R -completemsg -v my_prog.m
我想我需要告诉mcc更明确地链接到blpapi3.jar,但是如何?我是否需要设置静态Java路径?
非常感谢任何帮助!
Warning: A Java exception occurred getting the method description for the
java.util.Locale class:
Java exception occurred:
java.lang.NoClassDefFoundError: com/bloomberglp/blpapi/Session
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.getMethods(Unknown Source)
at com.mathworks.jmi.OpaqueJavaInterface.doesMethodExist(OpaqueJavaInterface.java:407)
Caused by: java.lang.ClassNotFoundException: com.bloomberglp.blpapi.Session
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 5 more
答案 0 :(得分:0)
经过多次浏览和大量试验,我已经解决了这个问题。答案已在本网站的几个帖子中。无论如何,有几个问题......
似乎
发生Java异常:java.lang.NoClassDefFoundError
是运行时错误,而不是编译错误。为了解决这个问题,我更新了位于,
的编译器和MCR中的classpath.txt$ matlabroot \工具箱\本地\ classpath.txt
这样的事情
javaclasspath
STATIC JAVA PATH
C:\Program Files\MATLAB\R2012a\java\patch
C:\blpv3\API\APIv3\JavaAPI\v3.7.1.1\lib\blpapi3.jar
或者,可以将blpapi3.jar复制到
中$ matlabroot / JAVA / jarext
与其他JAR文件一起使用。
另外,我删除了动态java路径,它只适用于Matlab IDE。
我已经在startup.m中使用
等子句禁用了ADDPATHif~isdeloyloy&& 〜ismcc addpath D:\ Matlab ... 端
mcc的参数必须包括源文件所在的目录,即
mcc -m -I' source_file_dir' -v top_level_function.m
处理代码中的文件时,相对于$ matlabroot引用,例如
如果已部署 sFile_Path = fullfile(matlabroot,' ..','输入',sFile_Name); 其他 sFile_Path = which(sFile_Name); 端
请注意,MCR的$ matlabroot与Matlab IDE的$ matlabroot不同。