spring 5.0.21.BUILD-SNAPSHOT源码解读,第一集

    工作了也有五六年了,一直从事java开发的工作,很多时候都是为了适配需求而开发代码,并没有对更深层去了解源码,最近无意间跟了下spring 5.0的源码,发现了彩蛋,激起了我的好奇,这才有了今天的这篇文章(后续我尽量更新)。

好了,进入正如:

1.准备环境:

  1.  操作系统:Ubuntu 20.04.1 LTS
  2.    JDK    :1.8.0_181
  3.    GRADLE版本:  Gradle 4.4.1
  4.    MAVEN 版本: Apache Maven 3.5.4
  5.    IDEA 版本:  2018.3.6

2源码下载:

  1.   spring源码(mirrors-Spring-Framework-5.0.1): https://github.com/spring-projects/spring-framework/tree/5.0.x 选择dist版本下载即可。 

  3.下载maven(3.5.4) :https://archive.apache.org/dist/maven/maven-3/3.5.4/source/

      

  4.gradle下载: 

      注意下载gradle之前先要确认spring源码中默认使用的是哪个版本,在spring源码下build.gradle文件中查看配置的gradle版本,然后我们本地去安装这个版本,比如我下载的源码是 spring5.0.1,源码中配置的默认gradle版本是:

    gradleVersion = "4.4.1",那么我就去安装4.4.1的版本,具体下载地址如下:  https://services.gradle.org/distributions/ 

    

 

 

 

  

  5.编译前准备:

    maven  与 gradle 安装完成后,命令行检查是否正确,如图:

    

 

 

     

  6.源码预编译:

    打开spring源码的import-into-idea.md文件,执行第一步,./gradle :spring-oxm:compileTestJava (注意此处不要使用spring默认配置的gradlew命令)使用我们本地安装的gradle进行编译,如下图:

    一定要先命令进入到spring源码目录:

    

    这一步很多人都会卡很久,也包括我,要么是jdk版本不匹配,要么是gradle版本不匹配,要么是maven网络被墙,总之各种各样的问题,我大概说下解决方案:

    如果是版本问题,建议最好更换版本(这就是我开头就放出了我的环境版本的原因),如果是网络被墙或者缓慢,可以在build.gradle中增加阿里仓库地址配置如下:

     

buildscript {
	repositories {
		maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'} //增加此处
		maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}  //增加此处
		maven { url 'https://repo.spring.io/plugins-release'}//原来的仓库地址一定要保存,切记切记。
	}
	
}

  7.导入IDEA

  这一步就简单了,idea直接导入选择gradle编译,指定本地安装版本,会自动下载依赖,这里会要很久很久,我用了25分钟。

  最终结果如下:

  

 

   自己可以新建一个moudle,选择gradle类型,然后增加spring-context依赖,就可以愉快的调试代码了。

  添加依赖:

    

 

 

  执行效果,下一期开始调试:

 

 如果idea中下载速度太慢,可以设置gradel的仓库地址为阿里云即可,具体如下:

  1.在init.gradle 目录下新建文件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/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                    remove repo
                }
            }
        }
 
         maven {
            url REPOSITORY_URL
        }
    }
}

  

    

           

 

 

      

            

 

posted on 2020-12-22 15:26  康仔☆  阅读(255)  评论(0编辑  收藏  举报

导航