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 閱讀(2949) 評論(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 串  回復  更多評論   

          主站蜘蛛池模板: 合作市| 苏尼特左旗| 罗定市| 佛冈县| 会理县| 安化县| 龙江县| 新营市| 平罗县| 山东省| 百色市| 丰镇市| 宁国市| 九寨沟县| 朝阳区| 望都县| 新竹县| 祁阳县| 酒泉市| 石景山区| 丽水市| 冷水江市| 海口市| 蒙自县| 大理市| 靖安县| 闸北区| 高雄市| 察哈| 苍山县| 宁波市| 木里| 昌黎县| 静宁县| 河源市| 曲水县| 广德县| 竹溪县| 墨脱县| 延长县| 佛学|