URLStreamHandler 那些事

在開發(fā)過程中發(fā)現(xiàn)如下的代碼在某些情況會出現(xiàn) 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處理啥繁,針對不同的協(xié)議比如jar,file,http,調(diào)用不同的hander惊畏。
那么嵌套jar當(dāng)然需要注冊特殊的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();
    }

在應(yīng)用初始化之前執(zhí)行JarFile.registerUrlProtocolHandler();就不會再拋java.io.FileNotFoundException了

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異婚脱,居然都是意外死亡今魔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門障贸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來错森,“玉大人,你說我怎么就攤上這事篮洁∩” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵袁波,是天一觀的道長瓦阐。 經(jīng)常有香客問我蜗侈,道長,這世上最難降的妖魔是什么睡蟋? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任宛篇,我火速辦了婚禮,結(jié)果婚禮上薄湿,老公的妹妹穿的比我還像新娘叫倍。我一直安慰自己,他們只是感情好豺瘤,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布吆倦。 她就那樣靜靜地躺著,像睡著了一般坐求。 火紅的嫁衣襯著肌膚如雪蚕泽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天桥嗤,我揣著相機與錄音须妻,去河邊找鬼。 笑死泛领,一個胖子當(dāng)著我的面吹牛荒吏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渊鞋,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绰更,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锡宋?” 一聲冷哼從身側(cè)響起儡湾,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎执俩,沒想到半個月后徐钠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡役首,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年尝丐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宋税。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡摊崭,死狀恐怖讼油,靈堂內(nèi)的尸體忽然破棺而出杰赛,到底是詐尸還是另有隱情,我是刑警寧澤矮台,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布乏屯,位于F島的核電站根时,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏辰晕。R本人自食惡果不足惜蛤迎,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望含友。 院中可真熱鬧替裆,春花似錦、人聲如沸窘问。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惠赫。三九已至把鉴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間儿咱,已是汗流浹背庭砍。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留混埠,地道東北人怠缸。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像钳宪,于是被迫代替她去往敵國和親凯旭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光劍書架上的書閱讀 3,881評論 2 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理使套,服務(wù)發(fā)現(xiàn)罐呼,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,698評論 0 3
  • 1侦高、【每日一思】建議:問題可以相對有牽引嫉柴,一方面讓大家感受到每日一思對自己的作用,另一方面匹配百日成長營的方向奉呛;提...
    我是木心閱讀 192評論 0 0
  • 你的前世计螺,是我朝夕相伴的影子。 那一世瞧壮,我們是人世間最親密的伴侶登馒,天涯海角,形影不離咆槽。 雖然我們相隔著世界上最遙遠...
    墨靈卷閱讀 126評論 0 0