在一心想要學習Spring框架源碼時,咱們會遇到不少麻煩的問題。開始本文前,你只須要擁有一個裝好IDEA的Ubuntu系統就能夠愉快啓程了。若是尚未IDEA,能夠參考在Ubuntu上安裝Intellij IDEA並建立桌面快捷方式,至於Git ,Gradle ,Java 能夠選擇事先安裝好,也能夠跟隨本文在遇到對應問題時再安裝。php
項目 | 版本號 | 是否須要提早安裝好 |
---|---|---|
Ubuntu | 18.04 LTS | 是 |
Intellij IDEA | 2019.1.3 | 是 |
Git | 2.17.1 | 否 |
Gradle | 5.5 | 否 |
Java | 1.8 | 否 |
URL:
https://github.com/spring-projects/spring-framework.git
html
方案選擇及理由:我選擇了使用默認包安裝Git(且我沒有作設置Git的操做),由於我搭建的主要目標是上手一套源碼閱讀環境,因此快捷的方式更好。如下是指令:java
sudo apt update sudo apt install git
第一次執行時出現這個報錯,且sudo apt update
執行過程當中也有一些更新失敗的報錯。後來休息了一段時間我又從新回來作的,第二次用的是apt-get
linux
sudo apt-get update sudo apt install git
執行完成後重啓IDEA,就能夠Git spring-framework代碼了git
網上Ubuntu安裝Git的文章中apt和apt-get指令都有,那有什麼區別呢?
參考這篇文章Linux中apt與apt-get命令的區別與解釋github
* 簡單補充幾點:web
apt
命令是在Ubuntu 16.04 引入的。apt-get
雖然沒被棄用,但做爲普通用戶,仍是應該首先使用 apt
。apt 命令 | 取代的命令 | 命令的功能 |
---|---|---|
apt install | apt-get install | 安裝軟件包 |
apt remove | apt-get remove | 移除軟件包 |
apt purge | apt-get purge | 移除軟件包及配置文件 |
apt update | apt-get update | 刷新存儲庫索引 |
apt upgrade | apt-get upgrade | 升級全部可升級的軟件包 |
apt autoremove | apt-get autoremove | 自動刪除不須要的包 |
apt full-upgrade | apt-get dist-upgrade | 在升級軟件包時自動處理依賴關係 |
apt search | apt-cache search | 搜索應用程序 |
apt show | apt-cache show | 顯示裝細節 |
若是像我同樣只是爲了讀spring源碼,Gitee碼雲上有個快速的git地址spring
使用如下地址:
★https://gitee.com/mirrors/Spring-Framework.git
代替
https://github.com/spring-projects/spring-framework.git
shell
Directory我仍然使用的是/spring-framework(而沒用/Spring-Framework),是由於能夠接着以前Github的下載結果繼續gitapache
咱們已經有一個項目在~/IdeaProjects/spring-framework
下了,可是在打開項目時再次遇到問題:
官網下載JDK都要Oracle帳號單點登陸了,常常要下JDK的仍是建議註冊一個Oracle帳號
有時候,下載個JDK要6個多小時,這誰頂得住啊?
華爲鏡像:https://repo.huaweicloud.com/java/jdk/
修改環境變量的時候用如下指令解決權限問題:
sudo su vi /etc/profile
打開vi編輯器以後,G
跳到文檔底部,按i
進入插入模式,並從光標當前位置開始輸入;按a
進入插入模式,從目前光標所在位置的下一個位置開始輸入文字;
按o
進入插入模式,並插入新的一行,從行首開始輸入文字。
按x
刪除字符,最後按ESC
並輸入:qw
保存離開
source /etc/profile java -version
我下載的是https://repo.huaweicloud.com/java/jdk/8u202-b08/ 中的jdk-8u202-linux-x64.tar.gz
oracle官網checksum:
https://www.oracle.com/webfolder/s/digest/8u202checksum.html
FileName | CheckSum |
---|---|
jdk-8u202-linux-x64.tar.gz | sha256: 9a5c32411a6a06e22b69c495b7975034409fa1652d03aeb8eb5b6f59fd4594e0 |
md5: 0029351f7a946f6c05b582100c7d45b7 |
獲取本地文件摘要的Shell指令:
sha256sum <filename> md5sum <filename>
二者一校對,沒毛病
Configure
->Structure for New Projects
New..
選擇剛纔安裝的JDK目錄,例如個人/usr/local/jdk1.8.0
下載
官方下載地址:https://gradle.org/releases
cd /usr/local sudo mkdir gradle sudo unzip -d /usr/local/gradle ~/下載/gradle-5.5-bin.zip
這裏爲啥要建一個gradle文件夾呢?由於開發時經常會用到多個不一樣版本gradle,因此建個gradle放全部gradle文件
sudo su vi /etc/profile
使環境變量生效
source /etc/profile
gradle -v
配置IDEA GRADLE_HOME
選擇IDEA-File
-Settings
,打開設置,而後搜索gradle
,
選擇Use local Gradle distribution
,輸入Gradle home:
/usr/local/gradle/gradle-5.5
再次嘗試編譯spring源碼
能夠直接點擊小錘子,或者點擊Build
-Build Project
cd ~/.gradle/ touch init.gradle vi init.gradle
allprojects{ repositories { def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/' all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/') || url.startsWith('https://repo.maven.apache.org') || url.startsWith('https://repo.spring.io')) { remove repo } } } maven { url REPOSITORY_URL } } }
配置以後改成從aliyun下載了,這樣就說明成功了
若是不是從
maven.aliyun.com
下載仍是從repo.spring.io
或者repo.maven.apache.org
下載,可能init.gradle還有些問題,好比https誤寫成http
等,建議當即中止build,修改init.gradle以後從新build。另外,整個build過程可能還有點耗時,可是至少Download時不會卡住了。
你多是程序包org.springframework.cglib.core
或者org.springframework.cglib.proxy
中的類找不到符號
,好比org/springframework/cglib/proxy/MethodProxy.java
文件報錯,以下圖:
也多是程序包org.springframework.objenesis
中的類找不到符號,又或者是org/springframework/objenesis/SpringObjenesis.java
文件報錯,以下圖:
其實官方對於這個錯誤早有提示,只是我們一直沒注意而已:
你也能夠選擇看這篇摘抄,也能夠直接讀源碼中的文件
https://www.cnblogs.com/zaid/articles/11147818.html
官方說得很簡單,因而我就在IDEA的Terminal中嘗試:
JAVA_HOME is not set and no 'java' command could be found in your PATH.
這個錯誤主要是說沒有配置Java環境變量,那我就直接執行如下source /etc/profile
cp ~/下載/gradle-5.5-bin.zip gradle/wrapper
修改spring-framework/gradle/wrapper/gradle-wrapper.properties中的distributionUrl=gradle-5.5-bin.zip
,以下圖:
再次執行./gradlew :spring-oxm:compileTestJava
(注意:大家輸入是用英文:
代替我這裏輸入的中文冒號:
)
報錯文件org/springframework/transaction/aspectj/AspectjTransactionManagementConfiguration.java
,找不到類AnnotationTransactionAspect
,以下圖
下載AspectJ的最新穩定版本
http://www.eclipse.org/aspectj/downloads.php#stable_release
cd ~/下載/ source /etc/profile java -jar aspectj-1.9.4.jar
而後就打開了一個安裝交互界面,我全點的Next,最後完成時有推薦去作的事,以下圖(咱們在4.配置環境變量中完成)
配置Aspectj環境變量
如圖所示
4.2 Facets新增AspectJ
4.3 選中spring-aspects_main
4.4 移除Modules中spring-aspects/main下的Kotlin只留下AspectJ
4.5 更改編譯器:
搜索Java Compiler,切換Use Compiler由Java
到Ajc
,Path to Ajc Compiler填寫/home/zaid/aspectj1.9/aspectjtools.jar
,選中Delegate to Javac