确定由 Matlab 加载的 Java 类的位置

确定由 Matlab 加载的 Java 类的位置

IT小君   2021-11-15T13:56:33

当从 Matlab 使用 java 时,有什么方法可以找出从 matlab 的 java 类路径中加载类的位置吗?我正在尝试诊断由同时使用的同一类的冲突版本引起的错误。

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

服务器费用不足...
评论(5)
IT小君

来自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/
2021-11-15T13:56:33   回复
IT小君

假设URLClassLoader正在使用an ,您可以file:像这样获取类文件URL:

ProblemClass.class.getResource("ProblemClass.class")
2021-11-15T13:56:33   回复
IT小君

根据 Thorbjørn Ravn Andersen,如果 j 引用了 Matlab 中的 java 对象,则可以使用以下 matlab 代码行检索其位置:

j.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()
2021-11-15T13:56:33   回复
IT小君

使用 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'
2021-11-15T13:56:34   回复
IT小君

从 1.5 开始使用:

java -verbose:class 

打印每个类的加载位置。

2021-11-15T13:56:34   回复