Sky's blog

          我和我追逐的夢(mèng)

          導(dǎo)航

          <2009年8月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          留言簿(8)

          隨筆分類

          隨筆檔案

          閱讀排行榜

          評(píng)論排行榜

          常用鏈接

          統(tǒng)計(jì)

          其他鏈接

          友情鏈接

          最新評(píng)論

          MANIFEST.MF 文件中奇怪的分行和空格要求

              工作中發(fā)現(xiàn)的一個(gè)非常奇怪也很有趣事情,有關(guān)MANIFEST.MF文件中的分行和空格的格式要求,分享給大家。

              對(duì)于通常的MANIFEST.MF文件,一般格式是:

          Class-Path: lib/a.jar lib/b.jar lib/c.jar lib/d.jar lib/e.jar lib/f.jar
              在一行之內(nèi)將所有的jar包路徑寫(xiě)上,空格分隔即可。

              但是對(duì)于一些大型的項(xiàng)目,因?yàn)橐蕾嚢姸啵热绱笥?0個(gè),那么如果還寫(xiě)在一行內(nèi),就會(huì)出現(xiàn)一個(gè)長(zhǎng)度驚人的行。程序運(yùn)行倒不會(huì)有任何問(wèn)題,但是對(duì)于版本控制就很不友好,如增加或者減少一個(gè)依賴包,這行就會(huì)被改寫(xiě)。以后compare不同版本時(shí),只能知道這行被修改了確無(wú)法直接知道是做了什么修改,必須通過(guò)其他方式才能對(duì)比出來(lái)。

              同樣的問(wèn)題發(fā)生在code merge時(shí),如果兩個(gè)分支都修改了這個(gè)文件,就必須通過(guò)手工來(lái)進(jìn)行merge,而且要對(duì)照出來(lái)彼此到底改了什么,很困難而且容易出錯(cuò)。

              因此一個(gè)改進(jìn)就是將這個(gè)文件中的依賴按照一行一個(gè)依賴的方式重寫(xiě),這樣以后修改時(shí)只會(huì)修改改依賴所在的行,很容易就對(duì)比出來(lái)具體做了哪些感動(dòng),code merge時(shí)版本控制軟件一般也很容易直接自動(dòng)merge成功。

              修改后的文件類似如下:

          Class-Path: lib/a.jar
              lib
          /b.jar
              lib
          /c.jar
              lib
          /d.jar
              lib
          /e.jar
              lib
          /f.jar

              但是在實(shí)際操作時(shí)發(fā)生了意料之外的問(wèn)題,會(huì)出現(xiàn)異常或者類無(wú)法找到,經(jīng)檢查發(fā)現(xiàn)問(wèn)題出現(xiàn)在MANIFEST.MF的格式上,MANIFEST.MF對(duì)于分行和空格是有特殊要求的:

          1. 每行的最后一個(gè)jar的名稱后不容許有空格
              即"    lib/b.jar"在b.jar后必須回車(chē)結(jié)束本行,不能有空格,一個(gè)都不能

          2. 每行的開(kāi)頭必須有不少于2個(gè)空格
              即"    lib/b.jar"在b.jar前必須有不下兩個(gè)空格

              以上兩個(gè)條件有一個(gè)不滿足都會(huì)出現(xiàn)問(wèn)題,有點(diǎn)古怪。

          posted on 2009-08-31 18:37 sky ao 閱讀(2949) 評(píng)論(2)  編輯  收藏 所屬分類: java

          評(píng)論

          # re: MANIFEST.MF 文件中奇怪的分行和空格要求 2009-09-01 11:18 隔葉黃鶯

          自定義一個(gè)類加載器來(lái)加載某些目錄中的 lib 或 class,或者用批處理生成 classpath 串,見(jiàn)
          http://www.aygfsteel.com/Unmi/archive/2007/07/25/132391.html
          linux 和 dos 版本的腳本都有  回復(fù)  更多評(píng)論   

          # re: MANIFEST.MF 文件中奇怪的分行和空格要求 2009-09-02 09:47 桔色

          用批處理生成 classpath 串  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 桃园县| 开平市| 荆州市| 阜新| 乌审旗| 崇文区| 宜兰市| 辰溪县| 唐山市| 余庆县| 四子王旗| 牡丹江市| 达州市| 都匀市| 西畴县| 简阳市| 大姚县| 聂拉木县| 鄂温| 城口县| 确山县| 济宁市| 瑞安市| 凉城县| 陵水| 泸定县| 永春县| 临安市| 朝阳区| 衡南县| 武夷山市| 德化县| 米泉市| 来凤县| 广南县| 武川县| 伊春市| 民县| 全南县| 景洪市| 平定县|