Spring5.3.x源码环境搭建(保姆级教程)
前提说明
最近第三次看Spring源码学习,前面由于过程太过痛苦都是看到一半,这次想着最后一次。这次一定要坚持下去。没想到Spring源码环境的搭建也不容易。
本篇文章记录博主从各个环境准备到运行跑出测试结果,以及中间遇到的这种问题。
最新补充:如果不想搭建,可以直接用我的学习源码,进行Spring源码学习。
spring-source-study项目下载地址,此版本为5.3.12。部分源码添加相关注解和说明,便于学习。
各个版本说明:
Idea版本:2021.3.3
Java版本:15
Gradle版本:7.2
Spring源码版本:5.3.x
话不多说,直接开始吧。
环境准备和各种软件下载安装
-
Idea下载和安装
这个不多说,相信都点进来了,这个肯定都安装了。由于各个版本有点区别,可能操作有点不同。
-
Java下载和安装
这个地方并不需要我们下载和安装Java。我们只需要下载编译包导入到idea就行。
-
进入下载界面,找到编译包下载。(下载可能需要登录账号,随便注册一个就好)
-
解压编译包,导入到idea。
首先点击右上角的
小齿轮
,再点Project Structure
,就会弹出这个添加的框。然后找到SDKs
,点击+
,找到Add JDK...
。最后找到刚下下载解压的文件夹即可。
-
-
Gradle的下载和安装
-
进入官网下载页面,找到7.2版本的并下载
-
配置环境变量
# 类似于Java的环境变量配置。 1、添加 GRADLE_HOME,值为gradle解压之后的地址。例如:D:\Tools\gradle-7.5 2、在path系统变量中,添加 %GRADLE_HOME%\bin 3、添加 GRADLE_USER_HOME 环境变量,值为你想指定的gradle仓库的地址。例如:D:\gradle_repository
-
添加
init.gradle
配置文件。在gradle的解压目录,找到init.d
文件夹,进入文件夹,创建一个init.gradle
文件,复制以下内容。gradle.projectsLoaded { rootProject.allprojects { buildscript { repositories { def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter' def GOOGLE_URL = 'https://maven.aliyun.com/repository/google' def NEXUS_URL = 'https://maven.aliyun.com/nexus/content/repositories/jcenter' all { ArtifactRepository repo -> if (repo instanceof MavenArtifactRepository) { def url = repo.url.toString() if (url.startsWith('https://jcenter.bintray.com/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL." println("buildscript ${repo.url} replaced by $JCENTER_URL.") remove repo } else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL." println("buildscript ${repo.url} replaced by $GOOGLE_URL.") remove repo } else if (url.startsWith('https://repo1.maven.org/maven2')) { project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL." println("buildscript ${repo.url} replaced by $REPOSITORY_URL.") remove repo } } } jcenter { url JCENTER_URL } google { url GOOGLE_URL } maven { url NEXUS_URL } } } repositories { def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter' def GOOGLE_URL = 'https://maven.aliyun.com/repository/google' def NEXUS_URL = 'https://maven.aliyun.com/nexus/content/repositories/jcenter' all { ArtifactRepository repo -> if (repo instanceof MavenArtifactRepository) { def url = repo.url.toString() if (url.startsWith('https://jcenter.bintray.com/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL." println("buildscript ${repo.url} replaced by $JCENTER_URL.") remove repo } else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL." println("buildscript ${repo.url} replaced by $GOOGLE_URL.") remove repo } else if (url.startsWith('https://repo1.maven.org/maven2')) { project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL." println("buildscript ${repo.url} replaced by $REPOSITORY_URL.") remove repo } } } jcenter { url JCENTER_URL } google { url GOOGLE_URL } maven { url NEXUS_URL } } } }
PS:这个文件大致就是配置第三方下载地址,方便下载依赖。
-
-
Spring源码的下载
建议直接在Gitee里面下载,下载地址,注意要从
master
切换成5.3.x
。然后直接在线zip文件即可。
导入到idea,配置相关环境
晚上上面的步骤,其准备工作就已经完成,下面就是导入到idea,然后坐相关的配置工作。
-
解压
spring-framework
,导入到idea。然后找到解压的目录,选择确认即可。如果需要选择导入项目的类型,及得勾选Gradle
。 -
修改项目相关的配置。点击右上角的
小齿轮
,再点Project Structure
。然后修改项目的的jdk版本为15。 -
修改idea中关于Gradle相关的配置。点击
setting
,搜索找到gradle
,修改下面的信息。其中use Gradle from
修改成Specified Location
。然后选择自己gradle的解压目录。Gradle JVM
修改成15
。 -
重载项目,刷新下载依赖。第一次刷新的时候,可能比较慢,需要等待一下。
遇到的问题和解决方法
提示不是.git
项目
提示不是git项目,缺少git信息。
# 1、初始化项目
git init
# 2、把项目交给git
git add --all
# 3、提交
git commit -m 'first commit'
依次运行上面的命令,等待完成。
修改根目录下的build.gradle
里面的内容
org.eclipse.persistence.jpa
maven地址错误,修改版本为2.7.7
log4j-core
maven地址错误,修改版本为2.17.1
Can not load tasks for root project 'spring'
错误,注释task
代码
上面所有的问题解决,就可以看到最终的运行了。恭喜你,初步的搭建已经成功!
创建自己的项目,测试运行
新建一个module
。选择Gradle
项目,然后填写自己的项目名称。点击完成。
然后创建如下几个文件:
person.class
public class Person {
private String name;
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
XmlMainTest.xml
public class XmlMainTest {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("beans.xml");
Person person = app.getBean(Person.class);
System.out.println(person);
}
}
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="com.bearjun.spring.study.bean.Person" id="person">
<property name="name" value="bearjun" />
</bean>
</beans>
目录结构如下:
最后启动main方法。答应最后的测试结果。说明我们的源码搭建已经完成。
最后说明:由于各个版本之间的配置和搭建还是有区别的。如果遇到其他问题,欢迎大家留言讨论。
评论区