Sky's blog

          我和我追逐的夢

          常用鏈接

          統計

          其他鏈接

          友情鏈接

          最新評論

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

              工作中發現的一個非常奇怪也很有趣事情,有關MANIFEST.MF文件中的分行和空格的格式要求,分享給大家。

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

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

              但是對于一些大型的項目,因為依賴包眾多,比如大于30個,那么如果還寫在一行內,就會出現一個長度驚人的行。程序運行倒不會有任何問題,但是對于版本控制就很不友好,如增加或者減少一個依賴包,這行就會被改寫。以后compare不同版本時,只能知道這行被修改了確無法直接知道是做了什么修改,必須通過其他方式才能對比出來。

              同樣的問題發生在code merge時,如果兩個分支都修改了這個文件,就必須通過手工來進行merge,而且要對照出來彼此到底改了什么,很困難而且容易出錯。

              因此一個改進就是將這個文件中的依賴按照一行一個依賴的方式重寫,這樣以后修改時只會修改改依賴所在的行,很容易就對比出來具體做了哪些感動,code merge時版本控制軟件一般也很容易直接自動merge成功。

              修改后的文件類似如下:

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

              但是在實際操作時發生了意料之外的問題,會出現異常或者類無法找到,經檢查發現問題出現在MANIFEST.MF的格式上,MANIFEST.MF對于分行和空格是有特殊要求的:

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

          2. 每行的開頭必須有不少于2個空格
              即"    lib/b.jar"在b.jar前必須有不下兩個空格

              以上兩個條件有一個不滿足都會出現問題,有點古怪。

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

          評論

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

          自定義一個類加載器來加載某些目錄中的 lib 或 class,或者用批處理生成 classpath 串,見
          http://www.aygfsteel.com/Unmi/archive/2007/07/25/132391.html
          linux 和 dos 版本的腳本都有  回復  更多評論   

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

          用批處理生成 classpath 串  回復  更多評論   

          主站蜘蛛池模板: 巫溪县| 广水市| 观塘区| 固阳县| 崇明县| 平谷区| 镇赉县| 琼结县| 韶山市| 永济市| 崇左市| 安陆市| 三台县| 通河县| 雷波县| 明水县| 义马市| 华阴市| 西乌| 泽州县| 开化县| 湖南省| 年辖:市辖区| 西贡区| 康平县| 滨州市| 六安市| 绥芬河市| 西充县| 大关县| 和平区| 田林县| 麦盖提县| 泉州市| 太湖县| 松滋市| 大庆市| 五华县| 庐江县| 什邡市| 大洼县|