可能是最卷的Spring源码系列(一):Spring源码环境搭建(idea)

本文是spring源码系列第一篇,计划通过10篇左右文章分析spring主要流程
工欲善其事,必先利其器。同样,学习Spring源码,就必须先把Spring的源码环境搭建起来

0 下载spring的源码

github中搜索spring-framework项目,直接git clone或者下载压缩包

1 编译源码

根据spring项目的md中编译指南
https://github.com/spring-projects/spring-framework/wiki/Build-from-Source

1.1 执行./gradlew build命令

官方文档中有写到需要执行./gradlew build命令(linux环境),Windows中运行gradlew build
在这里插入图片描述
由于网络原因这个命令一般是执行不成功的。
spring源码使用gradle wrapper的方式进行构建,该命令的作用是下载gradle,然后指定该项目使用下载的gradle进行构建。命令执行完后会完成依赖的引入及源码的编译。
网络原因造成的失败可以通过以下方法解决,打开gradle/wrapper/gradle-wrapper.properties可以看到gradle的下载路径以及解压路径
gradle-wrapper.properties

可以先把对应的gradle版本下载下来,然后把gradle-wrapper.properties的distributionUrl改成本地路径
这个时候执行命令gradle是能正常下载了,但是一些依赖的下载很慢,可以在下载完gradle后结束命令的执行改完仓库镜像配置后再重新执行

修改gradle的配置
在C:\Users\用户.gradle\wrapper\dists\gradle-4.10.3-bin\31t79e2qsceia4mkbojplrgx\gradle-4.10.3\init.d
中创建init.gradle,该配置为修改gradle的中央仓库为阿里云仓库

allprojects{
   repositories {
       def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
       all { ArtifactRepository repo ->
           def url = repo.url.toString()
           if ((repo instanceof MavenArtifactRepository) && (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        }
   }}

1.3 导入idea

1.3.1 执行./gradlew :spring-oxm:compileTestJava命令

在这里插入图片描述

该命令为编译spring-oxm项目

1.3.2 导入

File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle

1.4 idea创建自己的module

这和时候spring被成功导入到idea了,可以在创建一个module,module的配置文件(build.gradle)里里面引入spring-core,就可以对spring进行调试了
,如有需要还可引入其他依赖,贴一下我的build.gradle

plugins {
    id 'java'
}

group 'org.springframework'
version '5.3.9-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    // https://mvnrepository.com/artifact/junit/junit
    testImplementation group: 'junit', name: 'junit', version: '4.13.1'
    // https://mvnrepository.com/artifact/org.hamcrest/hamcrest-core
    testImplementation group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3'
    // https://mvnrepository.com/artifact/org.aspectj/aspectjweaver
    implementation group: 'org.aspectj', name: 'aspectjweaver', version: '1.9.6'



    // https://mvnrepository.com/artifact/javax.inject/javax.inject
    implementation group: 'javax.inject', name: 'javax.inject', version: '1'
    // https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api
    implementation group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'
    optional("org.apache.logging.log4j:log4j-api")
    optional("org.slf4j:slf4j-api")

    //log  输出
    implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.21'
    implementation group: 'ch.qos.logback', name: 'logback-core', version: '1.1.7'
    implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.1.7'
    // lombok
    implementation group: 'org.projectlombok', name: 'lombok', version: '1.18.12'
    //添加spring的依赖
    compile(project(":spring-context"))
    //主要是为了数据源  datasource
    compile(project(":spring-jdbc"))
    // https://mvnrepository.com/artifact/mysql/mysql-connector-java
    implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.23'
    //mybatis的核心依赖
    implementation group: 'org.mybatis', name: 'mybatis', version: '3.5.5'
    //mybatis和spring的插件包
    implementation group: 'org.mybatis', name: 'mybatis-spring', version: '2.0.5'

}
test {
    useJUnitPlatform()
}

这个时候spring源码的搭建已经完成了,但是之后的修改idea会使用gradle进行构建,gradle构建会非常慢,推荐改为idea构建,方式如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值