美文网首页
URLStreamHandler 那些事

URLStreamHandler 那些事

作者: 三云_16d2 | 来源:发表于2018-11-15 16:27 被阅读0次

在开发过程中发现如下的代码在某些情况会出现 java.io.FileNotFoundException: JAR entry lib/bds-portal-1.0.6.jar!/ not found in异常

    URI location = RatelTracePortal.class.getProtectionDomain().getCodeSource().getLocation().toURI();
    String rootJarPath = location.getSchemeSpecificPart();
    if(rootJarPath.indexOf("!/") != -1){
        rootJarPath = "jar:" + rootJarPath;
    }else {
        rootJarPath = "file:" + rootJarPath;
    }
    JarInputStream jaris = new JarInputStream(new URL(rootJarPath).openConnection().getInputStream());

例如这样的URL: jar:file:/.m2/repository/middleware-plugin-base-1.2.9-SNAPSHOT.jar!/lib/bds-portal-1.0.6.jar!/

java官方默认是不支持嵌套jar的,所以上面的URL默认会报告这个错误,URL的openConnection()实际上被委托给了URLStreamHandler处理,针对不同的协议比如jar,file,http,调用不同的hander。
那么嵌套jar当然需要注册特殊的hander。这段逻辑在JarFile.registerUrlProtocolHandler,代码如下

    private static final String        PROTOCOL_HANDLER         = "java.protocol.handler.pkgs";
    
    private static final String        HANDLERS_PACKAGE         = "com.alipay.sofa.ark.loader";

    public static void registerUrlProtocolHandler() {
        String handlers = System.getProperty(PROTOCOL_HANDLER, "");
        System.setProperty(PROTOCOL_HANDLER, ("".equals(handlers) ? HANDLERS_PACKAGE
            : handlers + "|" + HANDLERS_PACKAGE));
        resetCachedUrlHandlers();
    }

在应用初始化之前执行JarFile.registerUrlProtocolHandler();就不会再抛java.io.FileNotFoundException了

参考:
http://mercyblitz.iteye.com/blog/735529

相关文章

  • URLStreamHandler 那些事

    在开发过程中发现如下的代码在某些情况会出现 java.io.FileNotFoundException: JAR ...

  • 那些事,那些事(35)

    星期三下课后,同桌艳丽问贾月:“这星期你还回家吗?”“不回家了,回家一趟挺麻烦,这星期在学校。”贾月回答。艳丽又说...

  • 那些事,那些事(32)

    晚上贾月和王静在大娘家东屋住。贾月给王静讲起家里的事。贾月家很穷,贾月大伯家很富,十里八村有名的富裕。对于大伯贾月...

  • 流沐自制服装工作室:因为一部电影而辞职走上创业之路的巨蟹女孩的故

    那些念念不忘的事,那些耿耿于怀的事 那些甘之如饴的事,那些刻骨铭心的事 那些你的事,我的事,那些渺小而伟大的...

  • 缓存那些事(二)什么是缓存以及缓存的作用

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • 缓存那些事(三)如何构建缓存

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • 缓存那些事(一)概述

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • 缓存那些事(四)缓存面临的挑战

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • 那些小事

    那些无聊的事 那些小小的事 那些奇怪的事 那些每天的事 都因为你,变得有趣。 特别特别有趣

  • 那些事

    (一) 柠子从小真心一起玩的朋友就没有多少个,小时候柠子是个活泼爱笑的女孩,在小学时她有三个要好的朋友一起玩。她...

网友评论

      本文标题:URLStreamHandler 那些事

      本文链接:https://www.haomeiwen.com/subject/uswyfqtx.html