zoukankan      html  css  js  c++  java
  • java 查看运行时某个类文件所在jar的位置

    在一些大型项目中,项目所依赖的库可能比较到,有时候也会出现库冲突的情况,曾经遇到过一种情况:一个第三方云存储提供了一个sdk,这个sdk本身依赖httpclient相关的包,然而对方却把httpclient包中的部分代码复制到了sdk中,当项目中使用的httpclient版本与sdk中的版本一致时,没有任何问题,然而,当更新httpclient 至新版本的时候,问题出现了,出现了冲突,检查项目中使用的httpclient版本代码,没有任何问题,但是就是运行时报错,非常难以调试,甚至无法调试,这个时候,我们通常可以通过查找运行时出现冲突的地方时来自哪个jar包,java本身也有自带工具检查,简单代码如下:

        public static void main(String[] args) throws Exception {
            
            ProtectionDomain pd = ContentType.class.getProtectionDomain();  
              CodeSource cs = pd.getCodeSource();  
              System.out.println(cs.getLocation());
              
        }

    运行结果可以看到:file:/D:/dev/m2/org/apache/httpcomponents/httpcore/4.4.1/httpcore-4.4.1.jar

    但是,如果查看jdk中的类的时候,会出现空指针NPE异常:

        public static void main(String[] args) throws Exception {
              ProtectionDomain pd1 = List.class.getProtectionDomain();  
              CodeSource cs1 = pd1.getCodeSource();  
              System.out.println(cs1.getLocation());
              
        }

    CodeSource 为null, 有时候也可以使用-verbose来查看系统类的装载信息。

  • 相关阅读:
    阿里云服务器购买后的配置指南
    第一阶段总结
    RDD的checkpoint机制和键值对RDD数据分区
    广播变量与累加器
    Spark的监控
    Spark和MR的区别
    hadoop离线项目处理流程
    Flume(一)
    Sparkcore高级应用3
    SparkCore高级应用2(Spark on yarn)
  • 原文地址:https://www.cnblogs.com/jessezeng/p/7422052.html
Copyright © 2011-2022 走看看