一、环境准备及配置
1、编译环境介绍
本文章编译环境:IDEA2019.2.4 + JDK1.8.0.271 + Gradle5.6.4,编译的版本是Spring5.2.x。源码直接下载zip即可,或者clone,这里我介绍的是下载zip。
注意:坑了几个小时,JDK版本是JDK1.8.0.22,导致项目导入IDEA都未成功加载出来。Gradle版本不需要太高,官方推荐的是5.6.4,当然你也可以使用其它版本。
2、配置JDK(略)
3、配置Gradle(重)
3.1、下载Gradle5.6.4压缩包,解压到xx目录。
3.2、配置GRADLE_HOME全局变量
3.3、配置path
3.4、打开cmd,测试配置是否生效
3.5、在D盘新建了一个目录叫repository(方便maven和gradle共用一个仓库,IDEA需要指向这个目录)
3.6、配置GRADLE_USER_HOME,Gradle仓库,如果有Maven,MAVEN_HOME需要改成其它名称,怕和Gradle冲突
3.7、配置Gradle默认镜像,下载加速,仓库中创建init.gradle,并配置内容
allprojects{
repositories {
mavenLocal()
maven { url "https://maven.aliyun.com/nexus/content/groups/public/"}
def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/'
def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter/'
def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/'
def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'
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
}
if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
remove repo
}
if (url.startsWith('https://plugins.gradle.org/m2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
remove repo
}
}
}
maven { url ALIYUN_REPOSITORY_URL }
maven { url ALIYUN_JCENTER_URL }
maven { url ALIYUN_GOOGLE_URL }
maven { url ALIYUN_GRADLE_PLUGIN_URL }
}
}
二、预编译前对项目源码改动细节
1、解压Spring5.2.x源码,打开源码目录,修改gradle-wrapper.properties配置文件
2、将未解压的gradle-5.6.4-bin.zip放入wrapper目录中(1、2步操作:预编译的时候,就不需要去下载gradle.zip了)
3、给源码的build.gradle添加镜像,加速下载依赖,在第一行加入如下,第二部分保留源码plugins(去掉所有的apply false,表示应用插件),第三部分加入镜像,内容如下:
buildscript {
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
google()
jcenter()
}
}
plugins {
...
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
google()
jcenter()
}
}
找到 build.gradle中的 configure(allprojects) 中的 repositories,将之前的删掉,配置如下:
repositories {
mavenLocal()
//mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.springsource.org/plugins-release" }
maven { url "https://repo.spring.io/libs-spring-framework-build" }
}
4、找到settings.gradle注释掉spring-aspect模块
温馨提示:前面的配置都是为了后面不出错或者少出错,或者加快编译速度而做的准备,就跟我们敲代码提前把架构搭好一样,所以耐心配置还是很重要的,特别是Spring源码,很多人编译都未成功,何况去看源码?
三、导入IDEA前的预编译
源码导入IDEA的文档,大概分为编译spring-oxm,导入IDEA,排除spring-aspects(前面已经做了)三步。
1、打开源码根目录,cmd回车进入命令行窗口
2、输入命令,gradlew.bat :spring-oxm:compileTestJava进行预编译
gradlew.bat :spring-oxm:compileTestJava
3、结果出现BUILD SUCCESSFUL则预编译成功,进入下一环节
开始-耐心等待(前面配置了镜像,配置了gradle-5.6.4-bin.zip这里都用到了)
结束-成功-BUILD SUCCESSFUL 用时多少拼网速
注:出现问题可能网络问题,可以多试几次
四、导入IDEA
1、打开IDEA,导入项目
2、修改IDEA中的Gradle配置(重重重)
3、等待项目Configure build加载完成,如果加载报错啥的,可能就是之前的配置有问题,细节问题不在说。还有一种是JDK版本问题,更换即可。
完成后标志-CONFIGURE SUCCESSFUL-网太卡,用的旧电脑,耗时30min..
五、开始编译
1、直接编译整个项目
跳过测试编译
成功
六、新建模块测试
1、new-Module
2、选择gradle
3、加入依赖
4、创建测试文件
JavaConfig
package xue;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* 组件
*
* @author :HUANG ZHI XUE
* @date :Create in 2020-12-04
*/
@Configuration
@ComponentScan("xue")
public class JavaConfig {
}
SpringBuildTest
package xue;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* 测试类
*
* @author :HUANG ZHI XUE
* @date :Create in 2020-12-04
*/
public class SpringBuildTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(JavaConfig.class);
System.out.println(ac.getBean(JavaConfig.class));
}
}
运行测试类
七、Github信息
Spring github项目地址:https://github.com/spring-projects/spring-framework/tree/5.2.x
本项目github地址:https://github.com/shenyun499/spring-framework-5.2.x/tree/dev
2022-6-15记录:项目上传时因为aop-target未上传,被.gitignore住了target diretory,目前已经补上,若遇到aop.target相关的异常可能也是因为这个原因!