Скомпилированный код MATLAB/Datafeed с библиотекой Bloomberg APIv3/Java: Java Exception

Я пытаюсь скомпилировать код MATLAB, использующий Bloomberg APIv3, через набор инструментов Datafeed. Код отлично работает в 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 

person Martin    schedule 10.09.2014    source источник


Ответы (1)


После еще нескольких просмотров и множества испытаний я решил проблему. Ответы уже есть в нескольких постах на этом сайте. В любом случае есть несколько вопросов...

1

Кажется, что

Произошло исключение Java: java.lang.NoClassDefFoundError

это ошибка времени выполнения, а не ошибка компиляции. Чтобы исправить это, я обновил classpath.txt как в КОМПИЛЯТОРЕ, так и в MCR, расположенном по адресу:

$matlabroot\toolbox\local\classpath.txt

к чему-то вроде этого

путь к классу java

    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, который работает только для IDE Matlab.

2

Я отключил ADDPATH в startup.m с таким пунктом, как

если ~isdeployed && ~ismcc addpath D:\Matlab ... конец

3

Аргументы mcc должны включать каталоги, в которых находятся исходные файлы, т.е.

mcc -m -I 'каталог_исходного_файла' -v функция_верхнего_уровня.m

4

При работе с файлами в коде ссылайтесь на $matlabroot, например.

если развернут sFile_Path = fullfile(matlabroot,'..','Input',sFile_Name); еще sFile_Path = который(sFile_Name); конец

5

Обратите внимание, что $matlabroot MCR отличается от $matlabroot IDE Matlab.

person Martin    schedule 12.09.2014