對Spring framwrok 3.1.1 進(jìn)行構(gòu)建

過程說明

如果項目中使用了Spring Framework 的版本比較老(比如V3.1.1),而社區(qū)已經(jīng)對對應(yīng)的分支停止了維護(hù)狸涌,當(dāng)遇到了新發(fā)現(xiàn)的安全漏洞或缺陷時切省,會面臨面臨尷尬,雖然有官方的補(bǔ)丁版本但和自己的版本差別太大帕胆,不能直接靠升級解決朝捆,只能自己來維護(hù),而這一般都要被迫經(jīng)歷一個不熟悉的過程懒豹。

步驟

  1. 下載代碼
    一般老版本的的發(fā)布時間太久了芙盘,直接在發(fā)布區(qū)要爬很長時間的樓才(或許)可能找到對應(yīng)版本。最直接的還是通過git 來獲取吧脸秽。
# 下載代碼
git clone https://github.com/spring-projects/spring-framework
cd spring-framework

老版本在Tag中可以找到儒老,為了方便代碼修改和變更跟蹤,基于tag建立一個開發(fā)分支

# 基于tag 建立開發(fā)分支
git branch v3.1.1.dev v3.1.1.RELEASE
git checkout v3.1.1.dev 
  1. 下載jdk及ant鏡像
    要核對該版本對應(yīng)的JDK的版本记餐,既然比較老的版本驮樊,可能至少是JDK6 或7, 但不要認(rèn)為只要是高于指定版本的就可以編譯成功,一般不是的剥扣。對于Spring-framework 3.1.x 需要JDK6的編譯環(huán)境(經(jīng)嘗試可以用JDK7巩剖,但不能用JDK8),而3.2.x則是要JDK7的編譯環(huán)境钠怯。為了避免與運(yùn)行環(huán)境的不一致導(dǎo)致的兼容性問題佳魔,最好采用與運(yùn)行環(huán)境一致的JDK版本。

為避免繁瑣在本地安裝多個JDK并進(jìn)行環(huán)境變量的配置和切換晦炊,采用了通過docker 容器來構(gòu)建的方法鞠鲜。

# 下載jdk6-ant鏡像
docker pull nahuelolgiati/jdk6-antbuild
  1. 進(jìn)行構(gòu)建
    首先啟動容器,把要構(gòu)建的目錄掛載到容器上
# 啟動容器断国,掛載待構(gòu)建的代碼目錄
docker run -it --name ant6 -v ${spring-framework}:/root/spring-framework  nahuelolgiati/jdk6-antbuild sh

在容器中執(zhí)行構(gòu)建

cd /root/spring-framework/build-spring-framework/
ant 

構(gòu)建后打包

 ant jar package

# 之后在spring-framework/build-spring-framework/target/artifacts 下找到生成的發(fā)布包

ls artifacts/

spring-framework-3.1.1.RELEASE-dependencies.zip  spring-framework-3.1.1.RELEASE.zip
spring-framework-3.1.1.RELEASE-with-docs.zip

遇到過的問題

  • JDK的版本兼容
    在用高版本JDK編譯時會提示
The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files

降級到低版本(JDK6贤姆,7)就可以了

  • 構(gòu)建時間
    第一次構(gòu)建做完整時間很長,之前的版本采用ivy做依賴管理稳衬,在ant逐個的項目構(gòu)建中做下載霞捡,網(wǎng)絡(luò)(或者服務(wù)器端的瓶頸)原因,8個多小時后完成了大部分的構(gòu)建薄疚,但最后也出現(xiàn)過下載失敗而導(dǎo)致的構(gòu)建失敗碧信,多次重復(fù)執(zhí)行構(gòu)建后赊琳,才取得了成功。

  • 單元測試用例執(zhí)行失敗

在構(gòu)建中會報出單元測試失敗砰碴,比如

org.springframework.beans 中測試用例
standardReadMethodsAndOverloadedNonStandardWriteMethods
readMethodReturnsSubtypeOfWriteMethodParameter
執(zhí)行失敗

v3.1.1.RELEASE在JDK7(ryanmehta/jdk7-ant)中執(zhí)行單元測試會遇到躏筏,但在JDK6中這兩個單元測試用例是可以通過的。

因為test是依賴于jar 任務(wù)的呈枉,也就是說jar都已經(jīng)生成了趁尼。可以通過執(zhí)行ant jar package 避開單元測試猖辫。

  • 重復(fù)執(zhí)行ant Jar失敗
    在重復(fù)執(zhí)行ant jar時酥泞,會報如下的錯誤
/root/spring-framework/spring-build/multi-bundle/artifact.xml:60: The following error occurred while executing this line:
/root/spring-framework/spring-build/multi-bundle/common.xml:86: The following error occurred while executing this line:
/root/spring-framework/spring-build/resource/artifact.xml:35: impossible to publish artifacts for org.springframework#org.springframework.spring-parent;working@7e524d04e96d: java.io.IOException: file copy not done from /root/spring-framework/org.springframework.spring-parent/target/artifacts/ivy.xml to /root/spring-framework/org.springframework.spring-parent/../integration-repo/org.springframework/org.springframework.spring-parent/3.1.1.RELEASE/ivy-3.1.1.RELEASE.xml: destination already exists and overwrite is false
    at org.apache.ivy.plugins.repository.file.FileRepository.copy(FileRepository.java:78)
    at org.apache.ivy.plugins.repository.file.FileRepository.put(FileRepository.java:58)
    ...

可通過執(zhí)行clean-integration 或手工刪除integration-repo目錄排除

ant clean-integration jar

[前一篇]對Spring framwrok 3.1.1 修復(fù)RDF缺陷(CVE-2015-5211及CVE-2020-5421)的全過程

參考

building-spring-3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市住册,隨后出現(xiàn)的幾起案子婶博,更是在濱河造成了極大的恐慌,老刑警劉巖荧飞,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凡人,死亡現(xiàn)場離奇詭異,居然都是意外死亡叹阔,警方通過查閱死者的電腦和手機(jī)挠轴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耳幢,“玉大人岸晦,你說我怎么就攤上這事【υ澹” “怎么了启上?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長店印。 經(jīng)常有香客問我冈在,道長,這世上最難降的妖魔是什么按摘? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任包券,我火速辦了婚禮,結(jié)果婚禮上炫贤,老公的妹妹穿的比我還像新娘溅固。我一直安慰自己,他們只是感情好兰珍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布侍郭。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亮元。 梳的紋絲不亂的頭發(fā)上汰寓,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音苹粟,去河邊找鬼。 笑死跃闹,一個胖子當(dāng)著我的面吹牛嵌削,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播望艺,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼苛秕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了找默?” 一聲冷哼從身側(cè)響起艇劫,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惩激,沒想到半個月后店煞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡风钻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年顷蟀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骡技。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸣个,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出布朦,到底是詐尸還是另有隱情囤萤,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布是趴,位于F島的核電站涛舍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏右遭。R本人自食惡果不足惜做盅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窘哈。 院中可真熱鬧吹榴,春花似錦、人聲如沸滚婉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至远剩,卻和暖如春扣溺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瓜晤。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工锥余, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痢掠。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓驱犹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親足画。 傳聞我的和親對象是個殘疾皇子雄驹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353