一、依赖工具
- 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 **{<br /> **maven**{ **url 'http://maven.aliyun.com/nexus/content/groups/public'<br /> allowInsecureProtocol = true**}<br /> **mavenCentral()<br /> maven **{ **url "https://repo.spring.io/libs-spring-framework-build"<br /> 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 ](/Test ) <br />public void testConstructor() throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {<br />Class clazz = Person.class;<br />[//1.获取指定的构造器](//1.xn--tors3d8xgi7igyfj7zy9ulww):<br />Constructor con1 = clazz.getDeclaredConstructor(String.class);<br />[//2.保证此构造器是可访问的](//2.xn--ruq02hi9bvt0axrbb9jzxvj02bma603if6p):<br />con1.setAccessible(true);<br />[//3.调用此构造器创建运行时类的对象](//3.xn--5brr8hg1f4pdpylemcnskozvxzcjqvxu4a4kji9ap63ag8a)(两种方法):<br />//方法一:jdk8以及8之前<br />//Person p1= (Person)clazz.newInstance();<br />//方法二:jdk9以及9之后:<br />Person p2 =(Person)con1.newInstance("Tom");<br />System.out.println(p2);<br />}
所以先把 method.isAccessible() 这个方法删除就可以正常编译了
四、源码测试
右键spring-framework->New->Module...,选择Gradle->Java->创建spring-samples模块
在spring-samples目录下,找到build.gradle 添加:dependencies **{<br /> **implementation(project(":spring-beans"))<br /> implementation(project(":spring-context"))<br /> testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'<br /> testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'<br />**}**
再创建一个测试类,编写demo能正常运行,说明源码搭建成功!
感谢,阅读!