Spring源碼編譯

Spring源碼編譯調(diào)試

學(xué)習(xí)Spring源碼首先要本地下載源碼后編譯通過才能調(diào)試Spring,本文章主要介紹Spring源碼在本地的編譯和調(diào)試莉恼。 首先下載Spring源碼拌喉,如果不做開源貢獻(xiàn),只是自己編譯調(diào)試源碼的話直接下載源碼壓縮包俐银,解壓后導(dǎo)入Intellij尿背。如果需要提交代碼到Spring的話需要直接從git CheckOut出來。后續(xù)編譯調(diào)試都是一樣的捶惜。

首先打開Spring官方網(wǎng)站打開SpringFramework項(xiàng)目 https://spring.io/projects/spring-framework#overview

Spring官網(wǎng).png

直接從圖中紅框處進(jìn)入Spring源碼托管平臺(tái)GitHub田藐,頁可以直接訪問 https://spring.io/projects/spring-framework#overview
spring源碼托管地址.png

從Branch進(jìn)入,切換Tags吱七,選擇最新的Release(官方最新穩(wěn)定版本)版本汽久,
1111999.png

下載Zip壓縮包到本地踊餐,將壓縮包復(fù)制到自己的項(xiàng)目目錄下

cp /Users/wsq/Downloads/spring-framework-5.2.0.RELEASE.zip /Users/wsq/Documents/spring_compile

然后解壓壓縮包:

cd /Users/wsq/Documents/spring_compile

unzip spring-framework-5.2.0.RELEASE.zip

Spring默認(rèn)使用gradle進(jìn)行構(gòu)建窜管,有的同學(xué)會(huì)自己主動(dòng)下載gradle,其實(shí)是沒有必要的纬乍,Spring源碼已經(jīng)將Gradle可執(zhí)行文件和源碼一起打包了的,,所以下載源碼后編譯一個(gè)模塊,gradle就會(huì)主動(dòng)被下載安裝,如下是Spring源碼包的文件:其中就有g(shù)radlew,gradlew.bat等文件。

編譯前需要設(shè)置Maven的Settings.xml文件鏡像為阿里云姨拥,這樣下載依賴快一點(diǎn)憨奸。

如下是Settings.xml的內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
 
  <localRepository>/Users/wsq/.m2/alibaba/repository</localRepository>

<mirrors>
  <mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  </mirror>
</mirrors>
</settings>

然后在Intellij中設(shè)置Maven的settings.xml的位置:


設(shè)置settings.png

Spring源碼托管地址下面有編譯Spring源碼的步驟:


allStep.png

IntellijStep.png

steps.png

進(jìn)入Spring源碼目錄進(jìn)行部分模塊的編譯,順便安裝gradle

編譯前也需要在gradle配置中配置阿里云鏡像:

進(jìn)入Spring源碼目錄,打開build.gradle文件添加如下內(nèi)容:

buildscript {
        repositories {
        maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
        }

    dependencies {
        classpath 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16'
        classpath 'io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE'
    }
}


repositories {
                        maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' }
                        maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
            mavenCentral()
            maven { url "https://repo.spring.io/libs-spring-framework-build" }
        }

運(yùn)行命令./gradlew :spring-oxm:compileTestJava 進(jìn)行oxm模塊的編譯,稍等片刻編譯通過后,導(dǎo)入Intellij


buildSuccess.png

編譯成功后蔫饰,導(dǎo)入Intellij,導(dǎo)入后會(huì)發(fā)現(xiàn)所有模塊代碼都正常的越除,但是spring-aspects模塊報(bào)錯(cuò)饱苟,如果不需要調(diào)試這個(gè)module可以從項(xiàng)目中排出這個(gè)module城须,如果需要這個(gè)module的話為了保證編譯通過需要手動(dòng)下載Aspect


exclude.png

unbload.png

總體來說如果想保留spring-aspects模塊就需要手動(dòng)下載安裝Aspect ,如果不需要的話直接從項(xiàng)目中移除。一般來說后續(xù)就可以直接build成功項(xiàng)目了训挡,如果Inteiil版本太低的話表悬,編譯時(shí)會(huì)報(bào)錯(cuò):Kotin LinkageError饭庞,直接更新Intellij版本就可以了寒矿。

build成功后如下:

springBuildSuccess.png

Spring項(xiàng)目調(diào)試

在Spring項(xiàng)目中新建一個(gè)Module spring-demo

新建自己的包和源碼蓝牲,運(yùn)行:就可以調(diào)試了


demo.png

注意自己新建的Module要新建為gradle構(gòu)建的翎嫡;新建后在build.gradle中添加如下配置

    compile(project(":spring-context"))
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

源碼如下:


   String sayHello(String naem);
}

   @Override
   public String sayHello(String naem) {
      System.out.println("Hellow :" + naem);
      return "success";
   }
}

   public static void main(String args[]) {
      System.out.println("Spring 項(xiàng)目成功編譯3岢Hν铡<ù唷靴迫!");
      String path = "http://Users/wsq/Documents/spring/spring-framework-5.2.0.RELEASE/springdemo/src/main/resources/spring/spring-config.xml";
      ApplicationContext applicationContext = new FileSystemXmlApplicationContext(path);
      WelcomeService ws = (WelcomeService) applicationContext.getBean("welcomeService");
      ws.sayHello("wsq");
   }
}
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
   <bean id="welcomeService" class="cn.com.yuns.service.impl.WelcomeServiceImpl"/>
</beans>

運(yùn)行結(jié)果如下:

Task :springdemo:compileJava
Task :springdemo:classes

Task :springdemo:Entrance.main()
Spring 項(xiàng)目成功編譯i凇C裥А!帚呼!
Hellow :wsq

BUILD SUCCESSFUL in 9s
33 actionable tasks: 4 executed, 29 up-to-date
7:52:28 下午: Task execution finished 'Entrance.main()'.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辜妓,隨后出現(xiàn)的幾起案子枯途,更是在濱河造成了極大的恐慌,老刑警劉巖籍滴,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柔袁,死亡現(xiàn)場離奇詭異,居然都是意外死亡异逐,警方通過查閱死者的電腦和手機(jī)捶索,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灰瞻,“玉大人腥例,你說我怎么就攤上這事≡腿螅” “怎么了燎竖?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長要销。 經(jīng)常有香客問我构回,道長,這世上最難降的妖魔是什么疏咐? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任纤掸,我火速辦了婚禮,結(jié)果婚禮上浑塞,老公的妹妹穿的比我還像新娘借跪。我一直安慰自己,他們只是感情好酌壕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布掏愁。 她就那樣靜靜地躺著歇由,像睡著了一般。 火紅的嫁衣襯著肌膚如雪果港。 梳的紋絲不亂的頭發(fā)上沦泌,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音辛掠,去河邊找鬼谢谦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛公浪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播船侧,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼欠气,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了镜撩?” 一聲冷哼從身側(cè)響起预柒,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎袁梗,沒想到半個(gè)月后宜鸯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遮怜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年淋袖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锯梁。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡即碗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陌凳,到底是詐尸還是另有隱情剥懒,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布遇绞,位于F島的核電站霞捡,受9級(jí)特大地震影響衡楞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜保檐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崔梗。 院中可真熱鬧展东,春花似錦、人聲如沸炒俱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至砸王,卻和暖如春推盛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谦铃。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工耘成, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驹闰。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓瘪菌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嘹朗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子师妙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355