Ubuntu搭建Spring源碼環境常見問題

在一心想要學習Spring框架源碼時,咱們會遇到不少麻煩的問題。開始本文前,你只須要擁有一個裝好IDEA的Ubuntu系統就能夠愉快啓程了。若是尚未IDEA,能夠參考在Ubuntu上安裝Intellij IDEA並建立桌面快捷方式,至於GitGradleJava 能夠選擇事先安裝好,也能夠跟隨本文在遇到對應問題時再安裝。php

環境信息

項目 版本號 是否須要提早安裝好
Ubuntu 18.04 LTS
Intellij IDEA 2019.1.3
Git 2.17.1
Gradle 5.5
Java 1.8

1、咱們直奔主題Git源碼:

IDEA-Git
IDEA-Clone

URL:https://github.com/spring-projects/spring-framework.githtml

問題1:Cannot Run Git

沒有安裝Git

解決方案:如何在Ubuntu系統上安裝Git

方案選擇及理由:我選擇了使用默認包安裝Git(且我沒有作設置Git的操做),由於我搭建的主要目標是上手一套源碼閱讀環境,因此快捷的方式更好。如下是指令:java

sudo apt update
sudo apt install git

/var/lib/dpkg/lock資源暫時不可用
第一次執行時出現這個報錯,且sudo apt update執行過程當中也有一些更新失敗的報錯。後來休息了一段時間我又從新回來作的,第二次用的是apt-getlinux

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-get命令之間的區別:
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 顯示裝細節

問題2:clone git慢

解決方案1:git clone速度太慢的解決辦法

解決方案2(更推薦):

若是像我同樣只是爲了讀spring源碼,Gitee碼雲上有個快速的git地址spring

Gitee-Spring
使用如下地址:
https://gitee.com/mirrors/Spring-Framework.git
代替
https://github.com/spring-projects/spring-framework.gitshell

Directory我仍然使用的是/spring-framework(而沒用/Spring-Framework),是由於能夠接着以前Github的下載結果繼續gitapache

Clone-Gitee

2、導入項目到IDEA

咱們已經有一個項目在~/IdeaProjects/spring-framework下了,可是在打開項目時再次遇到問題:

問題3:Please, set the Gradle JVM option

Gradle JVM Not Found

解決方案:安裝JDK1.8!Ubuntu18.04 安裝Jdk1.8

官網下載JDK都要Oracle帳號單點登陸了,常常要下JDK的仍是建議註冊一個Oracle帳號

問題4:官網下載JDK慢

有時候,下載個JDK要6個多小時,這誰頂得住啊?

解決方案:參考博客# JDK下載過慢的問題解決方案

華爲鏡像: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>

文件摘要

二者一校對,沒毛病

安裝好JDK後以後還沒完:

  1. 選擇Welcome to IntelliJ IDEA的右下角Configure->Structure for New Projects
    Structure for New Projects
  2. 點擊New..選擇剛纔安裝的JDK目錄,例如個人/usr/local/jdk1.8.0
    New Project SDK
  3. 從新打開以前Git下來的源碼
    打開項目

3、火燒眉毛開始編譯源碼:

問題4: spring源碼編譯須要gradle

IDEA在幫忙下載Gradle

解決方案:本身手動下載Gradle

  1. 下載
    官方下載地址:https://gradle.org/releases
    Gradle Binary Only

  2. 解壓
cd /usr/local
sudo mkdir gradle
sudo unzip -d /usr/local/gradle ~/下載/gradle-5.5-bin.zip

這裏爲啥要建一個gradle文件夾呢?由於開發時經常會用到多個不一樣版本gradle,因此建個gradle放全部gradle文件

  1. 配置環境變量
sudo su
vi /etc/profile

Gradle環境變量
使環境變量生效

source /etc/profile
  1. 驗證
gradle -v
  1. 配置IDEA GRADLE_HOME
    選擇IDEA-File-Settings,打開設置,而後搜索gradle,
    選擇Use local Gradle distribution,輸入Gradle home:
    /usr/local/gradle/gradle-5.5
    配置IDEA-GRADLE_HOME

  2. 再次嘗試編譯spring源碼
    能夠直接點擊小錘子,或者點擊Build-Build Project
    再次編譯Spring源碼

問題5: gradle下載依賴慢

Gradle下載依賴慢

解決方案:參考這篇博客Gradle配置解決下載速度慢問題

  1. 對Gradle進行全局的設置
cd ~/.gradle/
touch init.gradle
vi init.gradle

init.gradle

  1. 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時不會卡住了。

問題6:cglib和objenesis的編譯錯誤


報錯模塊:spring-core


報錯示例:

你多是程序包org.springframework.cglib.core或者org.springframework.cglib.proxy中的類找不到符號
,好比org/springframework/cglib/proxy/MethodProxy.java文件報錯,以下圖:
cglib編譯報錯
也多是程序包org.springframework.objenesis中的類找不到符號,又或者是org/springframework/objenesis/SpringObjenesis.java文件報錯,以下圖:
Objenesis編譯報錯

報錯緣由:

其實官方對於這個錯誤早有提示,只是我們一直沒注意而已:
import指南

你也能夠選擇看這篇摘抄,也能夠直接讀源碼中的文件
https://www.cnblogs.com/zaid/articles/11147818.html

解決方案:

  • 官方說得很簡單,因而我就在IDEA的Terminal中嘗試:
    RepackJar

  • 可是咱們又遇到新的問題JAVA_HOME is not set and no 'java' command could be found in your PATH.
  • 這個錯誤主要是說沒有配置Java環境變量,那我就直接執行如下source /etc/profile

  • 又遇到一個問題,執行gradlew就開始下載gradle,參考博客:gradlew和gradle的區別,如下是我我的的解決步驟:
  1. 把以前下載的gradle-5.5-bin.zip壓縮包拷貝到項目的gradle/wrapper目錄下。
cp ~/下載/gradle-5.5-bin.zip gradle/wrapper
  1. 修改spring-framework/gradle/wrapper/gradle-wrapper.properties中的distributionUrl=gradle-5.5-bin.zip,以下圖:

  2. 再次執行./gradlew :spring-oxm:compileTestJava(注意:大家輸入是用英文:代替我這裏輸入的中文冒號)

問題7:AspectJ編譯問題


報錯模塊:spring-aspects


報錯示例:

報錯文件org/springframework/transaction/aspectj/AspectjTransactionManagementConfiguration.java,找不到類AnnotationTransactionAspect,以下圖
AspectJ報錯

解決方案

  1. 下載AspectJ的最新穩定版本
    http://www.eclipse.org/aspectj/downloads.php#stable_release
    下載AspectJ

  2. 安裝AspectJ
    執行命令行
cd ~/下載/
source /etc/profile
java -jar aspectj-1.9.4.jar

而後就打開了一個安裝交互界面,我全點的Next,最後完成時有推薦去作的事,以下圖(咱們在4.配置環境變量中完成)
AspectJ-Recommend

  1. 配置Aspectj環境變量
    如圖所示
    配置Aspectj環境變量

  2. 爲spring-apspect工程添加Facets屬性
  • 4.1 打開File -> Project Structure..
  • 4.2 Facets新增AspectJ
    新增AspectJ

  • 4.3 選中spring-aspects_main
    選中spring-aspects_main

  • 4.4 移除Modules中spring-aspects/main下的Kotlin只留下AspectJ
    刪除Kotlin

  • 4.5 更改編譯器:
    搜索Java Compiler,切換Use Compiler由JavaAjc,Path to Ajc Compiler填寫/home/zaid/aspectj1.9/aspectjtools.jar,選中Delegate to Javac
    更改編譯器

相關文章
相關標籤/搜索