确定Matlab加载的java类的位置

当使用Matlab中的java时,有没有办法弄清楚matlab的java类路径在哪里被加载? 我正在尝试诊断由同时使用的同一类的冲突版本引起的错误。

具体来说,我正在寻找的类是org.apache.lucene.store.FSDirectory。 它似乎被其中一个matlab工具箱使用,但我不知道哪一个。

来自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/ 

假设正在使用URLClassLoader ,您可以获取file:类文件的URL,如下所示:

 ProblemClass.class.getResource("ProblemClass.class") 

PerThorbjørnRavnAndersen,如果j引用Matlab中的java对象,可以使用以下matlab代码行检索其位置:

 j.getClass().getProtectionDomain().getCodeSource().getLocation().getPath() 

使用inmem函数如下:

 [M,X,J] = inmem 

此函数返回输出参数J中的Java类列表。(它还返回M中所有当前加载的M文件的名称,以及X中所有当前加载的MEX文件的名称。)

以下是inmem函数的输出示例:

 [m,x,j] = inmem; 

MATLAB显示:

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

从1.5使用:

 java -verbose:class 

打印每个类的加载位置。