代码之家  ›  专栏  ›  技术社区  ›  Raphael

确定未能加载的类文件的路径

  •  0
  • Raphael  · 技术社区  · 6 年前

    我们有一个 UnsupportedClassVersionError 但是,在识别有问题的文件的位置时遇到问题(类路径中有15个JAR,其中几个可能包含特定的类)。我们怀疑同一个类可能多次出现在类路径中。

    Java选项 -verbose:class 打印出我们想要的东西,但只是为了 成功地 加载的类。不会打印导致错误的类(文件)。

    我们如何确定导致类装入器错误的类文件的物理位置(最有可能在JAR中)?

    我想可能会在中设置一个断点 ClassLoader 但所有相关的方法都是可行的 native .

    2 回复  |  直到 6 年前
        1
  •  1
  •   Raphael    6 年前

    Java的类加载器完全依赖于类路径来搜索它 整齐 ,并使用(或尝试)他们为试图加载的任何给定类找到的第一个定义。特别是,Java首先发现哪个类需要您的问题类并不重要。这些类装入器对试图装入的每个类执行相同的路径搜索。

    很可能类名——尤其是它的包——会让您知道要检查哪些JAR,但您并不真正需要它。最简单、最可靠的解决方案是像Java那样:按照jar在类路径中出现的顺序检查每个jar。

    你可以列出一个罐子里的东西 jar -tf myjar.jar .如果你在找 org.other.SomeClass ,它会在罐子里显示为 /org/other/SomeClass.class .

        2
  •  -1
  •   Ahmad Shahwan    6 年前

    我会这样做:

    log.info(ClassLoader.getSystemResource("com/acme/MyClass.class"));
    

    为了班级 com.acme.MyClass .

    推荐文章