一、依赖工具
- JDK11.0.6
- gradle7.2(gradle-wrapper.properties目录下可以指定下载版本)
- idea2021.1.3
- spring-framework5.3.x
二、下载源码
下载源码方法
- 有梯子直接从github上拉取
- 没有梯子,可以从github上fork到自己仓库,然后导出到gitee上从gitee上下载
github地址:github.com/spring-proj…
配置gradle版本,以及加速下载
- spring5.3.x默认gradle版本是7.2,可以在 gradle/wrapper/gradle-wrapper.properties 下修改gradle版本,一定要大于7.0否则加载组件会失败
- 在spring-framework目录下build.gradle文件添加阿里云加速
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public'
allowInsecureProtocol = true }<br>
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build"
allowInsecureProtocol = true }<br>
}
- 关于spring5.3.x使用kotlin静态类型编程语言编写代码,可以把idea中kotlin升级到最新版,并且修改项目中配置
我这是已经升级到最新版,没有升级会出现一个升级按钮,点击就会自动升级了
升级完成后,全局搜索**kotlin.jvm 和 kotlin-bom **修改对应升级版本就可以了
三、编译
前期准备工作完成后,可以开始编译了
编译前需要把项目JDK版本调整到11
选择idea,最左边Gradle->spring-oxm->other->compileTestJava双击编译
因为编译使用到的是JDK11,会出现一个错误
这是因为我们使用的JDK是11,而 **isAccessible() **这个方法在jdk9时弃用了,导致编译失败,可以看下面这个例子就明白了了
`@Test
public void testConstructor() throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
Class clazz = Person.class;
//1.获取指定的构造器:
Constructor con1 = clazz.getDeclaredConstructor(String.class);
//2.保证此构造器是可访问的:
con1.setAccessible(true);
//3.调用此构造器创建运行时类的对象(两种方法):
//方法一:jdk8以及8之前
//Person p1= (Person)clazz.newInstance();
//方法二:jdk9以及9之后:
Person p2 =(Person)con1.newInstance("Tom");
System.out.println(p2);
}
所以先把 method.isAccessible() 这个方法删除就可以正常编译了
四、源码测试
右键spring-framework->New->Module...,选择Gradle->Java->创建spring-samples模块
在spring-samples目录下,找到build.gradle 添加:
dependencies {
implementation(project(":spring-beans"))
implementation(project(":spring-context"))
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}
再创建一个测试类,编写demo能正常运行,说明源码搭建成功!
感谢,阅读!