Matlab: использование сторонних классов Java изнутри spmd - PullRequest
1 голос
/ 30 ноября 2011

Я пытаюсь использовать класс из сторонней библиотеки Java из spmd, но продолжаю получать различные ошибки, связанные с его импортом.

Вот довольно минимальный пример:

spmd (1)
    javaaddpath([pwd 'lib/guava-10.0.1.jar']);
    import com.google.common.collect.MinMaxPriorityQueue;
    pq = MinMaxPriorityQueue.create();
end

Это дает мне ошибку

??? Error: MATLAB cannot determine whether "MinMaxPriorityQueue" refers to a
function or variable.
See <a href="matlab: helpview([docroot
'/toolbox/distcomp/distcomp_ug.map'],'SPMD_LIMITATIONS')">SPMD in MATLAB,
"Limitations"</a>.

(Конечно, , что документ "Ограничения" , похоже, не имеет ничего особенно релевантного.)

Перемещение javaaddpath и / или import за пределы блока spmd не помогает;выполнение этого без import, но вместо того, чтобы просто сказать pq = com.google.common.collect.MinMaxPriorityQueue.create, приводит к той же ошибке, что и com.

Вызов анонимной функции, определенной вне блока spmd, дает другую ошибку:

javaaddpath([pwd '/lib/guava-10.0.1.jar']);
make_pq = @() com.google.common.collect.MinMaxPriorityQueue.create();
spmd (1)
    javaaddpath([pwd '/lib/guava-10.0.1.jar']);
    pq = make_pq();
end

получает меня

The class "com.google.common.collect.MinMaxPriorityQueue" is undefined.
Perhaps Java is not running.

Но Java определенно работает, потому что

spmd (1)
   pq = java.util.PriorityQueue();
end

и

spmd (1)
    javaaddpath([pwd '/lib']);
    pq = ArrayPriorityComparator.create();
end

работают (ArrayPriorityComparator - этоавтономный класс Java в ./lib).

Мне кажется, что это проблема с синтаксическим анализом Matlab блока spmd.Но я не думаю, что могу использовать javaObject() или javaMethod(), чтобы обойти это, так как мне нужно вызвать статический метод для создания объекта, и я не могу просто бросить его в eval, потому что я получаюTransparency violation error (или, если я помещу это в анонимную функцию, определенную вне spmd, я получу ту же ошибку class is undefined).

Есть идеи?Реальные решения или ужасные ужасные хаки приветствуются.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Полагаю, это еще одна проблема динамического пути к классам.О том, как использовать «статический путь к классам», см. Добавление классов и методов Java в рабочую область MATLAB .

В случаях, когда вы не зависите от статического пути к классам, используйте метод, описанный в следующих постах.

0 голосов
/ 01 декабря 2011

Вы пытались использовать pctRunOnAll для установки пути java?

Боюсь, у меня нет удобного кластера, чтобы проверить, будет ли это работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...