当从 Matlab 使用 java 时,有什么方法可以找出从 matlab 的 java 类路径中加载类的位置吗?我正在尝试诊断由同时使用的同一类的冲突版本引起的错误。
具体来说,我正在寻找的类是 org.apache.lucene.store.FSDirectory。它似乎被 matlab 工具箱之一使用,但我不知道是哪个。
当从 Matlab 使用 java 时,有什么方法可以找出从 matlab 的 java 类路径中加载类的位置吗?我正在尝试诊断由同时使用的同一类的冲突版本引起的错误。
具体来说,我正在寻找的类是 org.apache.lucene.store.FSDirectory。它似乎被 matlab 工具箱之一使用,但我不知道是哪个。
假设URLClassLoader
正在使用an ,您可以file:
像这样获取类文件的URL:
ProblemClass.class.getResource("ProblemClass.class")
根据 Thorbjørn Ravn Andersen,如果 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
打印每个类的加载位置。
来自http://www.exampledepot.com/egs/java.lang/ClassOrigin.html