Spring5.3+gradle6.4+IDEA2020.1+Java1.8 update6編譯spring源碼


  這兩天一直在解決編譯spring源碼的問題,期間失敗了無數次。當然失敗的原因也各不相同,下面我主要列舉我在編譯期間遇到的問題進行記錄。如果大伙兒遇到相同的問題,希望可以給到解決的靈感。好了話不多說,我先來說說編譯spring的前期准備。

  准備:1、在github上下載源碼 可以git clone 或者 down zip

     2、下載gradle

        3、IDEA 這個不用多說  

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

現在手中我已經有了spring的源碼,打開里面是這些文件

 

 1、和大多數博客寫的一樣,首先如果你導入IDEA,那么點開import-into-idea.md,到project的根目錄下  cmd運行 gradlew :spring-oxm:compileTestJava

    Within your locally cloned spring-framework working directory:

  1. Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava

  2. Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)

  3. When prompted exclude the spring-aspects module (or after the import via File-> Project Structure -> Modules)

  4. Code away

 注意:這期間一般會失敗多次 ,然后這個命令還會下載一個新的gradle(雖然我不太喜歡這樣,畢竟我自己已經下了一個). 由於時間太長了,所以我們還需要配置gradle國內鏡像源。后來為了使用這個新下載的gradle,所以我在C:\Users\xxx\.gradle\wrapper\dists\gradle-6.4-bin\aj6cyggqps6mdbpl6cfppfwqk\gradle-6.4 這個目錄下,新建init.d文件夾,init.d文件夾下新建init.gradle文件,並且寫入一下內容:

allprojects{
repositories {
def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
remove repo
}
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
remove repo
}
}
}
maven {
url ALIYUN_REPOSITORY_URL
url ALIYUN_JCENTER_URL
}
}
}

第二個要注意的是,雖然這里全局配置了阿里的鏡像源,但是並不是所有的版本阿里鏡像源都有,所以在后面jar包因為版本問題無法下載時,你最后把這個文件再刪除了。就不走全局的配置了。

第三個要注意的是,如果明明聯網了,但是還是不能下載,那么就連手機熱點把  這個方法有時候有點用。

2、當上一步完成后,其實就可以導入IDEA了。

 

 再導入源碼之前,我建議你先到這個界面,在設置里面把gradle maven 之類配置好。

 

3、點擊open后,IDEA就會幫你自動導入。在此期間它會幫你繼續下載需要的jar包,還記的我上面說的如果沒辦法下載了 記得連連手機熱點,並且刪除init.gradle試試。

這里需要注意的是,你最好再更改下settings.gradle里面的

pluginManagement {
    repositories {
        maven {url "http://maven.aliyun.com/nexus/content/groups/public/" }
        mavenCentral()
        gradlePluginPortal()
        maven { url 'https://repo.spring.io/plugins-release' }
        maven { url "https://maven.aliyun.com/repository/spring-plugin" }

    }
}

這里可以幫你加速下載jar 。以及build.gradle中的

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" }
        }

 

4、如果以上步驟,均沒有問題那么你會得到一個新的界面:

 

 gradle是可以展開的。

接下來你就需要測試了,這里掛一個鏈接:https://www.bilibili.com/video/BV1XJ41117tT?from=search&seid=11806535173146251076 這個視頻說了如何測試。

但是我要說的是,按照視頻里面會出現一個錯誤:

spring 編譯 出的錯誤 Error:(347, 51) java: 找不到符號 符號: 變量 CoroutinesUtils 位置:

當然,很多博主都對這個問題做出了解決:https://blog.csdn.net/gooaaee/article/details/104437902

但是我要說的是,按照上面說的后,其實不用不用再編譯整個spring的項目了,直接run即可,那么就出現了:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM