Определить местоположение класса Java, загруженного Matlab - PullRequest
2 голосов
/ 14 июля 2009

При использовании java из Matlab, есть ли какой-нибудь способ выяснить, откуда в Matlab путь к классу java загружается класс? Я пытаюсь диагностировать ошибку, вызванную одновременным использованием конфликтующих версий одного и того же класса.

В частности, я ищу класс org.apache.lucene.store.FSDirectory. Кажется, он используется одним из наборов инструментов Matlab, но я не знаю, какой именно.

Ответы [ 5 ]

8 голосов
/ 14 июля 2009

С http://www.exampledepot.com/egs/java.lang/ClassOrigin.html

// Get the location of this class
  Class cls = this.getClass();
 ProtectionDomain pDomain = cls.getProtectionDomain();
  CodeSource cSource = pDomain.getCodeSource();
  URL loc = cSource.getLocation();  // file:/c:/almanac14/examples/
2 голосов
/ 14 июля 2009

Предполагая, что используется URLClassLoader, вы можете получить file: URL-адрес файла класса следующим образом:

ProblemClass.class.getResource("ProblemClass.class")
1 голос
/ 15 июля 2009

Для Thorbjørn Ravn Andersen, если j ссылается на java-объект в Matlab, его местоположение можно получить с помощью следующей строки кода matlab:

j.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()
0 голосов
/ 15 июля 2009

С 1.5 с использованием:

java -verbose:class 

Печатает, откуда был загружен каждый класс.

0 голосов
/ 14 июля 2009

Используйте функцию inmem следующим образом:

[M,X,J] = inmem

Эта функция возвращает список классов Java в выходном аргументе J. (Она также возвращает имена всех загруженных в данный момент M-файлов в M и имена всех загруженных в данный момент MEX-файлов в X).

Вот пример вывода из функции inmem:

[m,x,j] = inmem;

MATLAB отображает:

j = 
    'java.util.Date'
    'com.mathworks.ide.desktop.MLDesktop'
...