先统一下环境版本要求:
Spring源码版本5.x
Gradle6.4.x及其以上版本
Jdk11(最好是11,jdk8也可以,但是不敢保证一遍成功)
如果官网下载速度慢,这里提供一个百度云链接:https://pan.baidu.com/s/1LOUVsO2orCUtKRdjOKqGCA,提取码:qqo5
下载完成后执行exe安装包,自己选一个安装路径(我的是默认路径),点击下一步:
C:\Program Files\Java\jdk-11.0.6
).;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
.
啊!%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
cmd
查看环境变量配置是否生效:java -version
cmd
查看版本时仍为jdk8的解决办法:https://blog.csdn.net/qq_26369317/article/details/80922425gradle-x.x-bin.zip
是需要下载的安装发布版(使用这个就行!注意:这里建议大家下载Gradle6.4.x的版本,在写这篇文章的时候我采用的是Gradle5.6.3这个版本,后来有些粉丝私信反应Spring5.3.x,用Gradle5.x的版本好像会有一些问题,但是不是每个人都出问题,所以为了顺应新版本的Spring,建议尽量采用6.x版本的Gradle!)gradle-x.x-src.zip
是源码gradle-x.x-all.zip
则是下载全部的文件如下图所示:
F:\Gradle\gradle-5.6.3-all\gradle-5.6.3
)%GRADLE_HOME%\bin
cmd
命令去测试一下是否配置成功:gradle -v
查看到gradle的版本信息,配置成功~
cmd
命令:mkdir .gradle
则,我们创建的.gradle
文件夹就是用来存放所下载的jar包仓库主目录!
init.d
文件夹下,新建一个 init.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
}
}
}
说明IDEA未配置Gradle,以及Gradle镜像!请接着往下操作:
设置成功后,再继续往下配置:
主要修改的地方如下几个文件:
import-into-idea.md
:这是官方提供的spring源码导入idea的步骤和注意说明,可以移步:IDEA导入Spring源码调试必看了解一下!settings.gradle
文件,下载依赖的网络速度之不可描述原因,这里需要加上阿里云的maven镜像仓库:maven {
url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven {
url "https://maven.aliyun.com/repository/public" }
修改好之后如下图所示:
gradle.properties
文件,都已经加了详细注释:version=5.3.0-SNAPSHOT
## 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出
org.gradle.jvmargs=-Xmx2048M
## 开启 Gradle 缓存
org.gradle.caching=true
## 开启并行编译
org.gradle.parallel=true
## 启用新的孵化模式
org.gradle.configureondemand=true
## 开启守护进程 通过开启守护进程,下一次构建的时候,将会连接这个守护进程进行构建,而不是重新fork一个gradle构建进程
org.gradle.daemon=true
修改好之后如下图所示:
build.gradle
文件,加上使用阿里云仓库,提高下载速度:repositories {
// 新增2个阿里镜像地址
maven {
url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven {
url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
mavenCentral()
maven {
url "https://repo.spring.io/libs-spring-framework-build" }
// 新增spring插件库
maven {
url "https://repo.spring.io/plugins-release"}
}
修改好之后如下图所示:
gradle-wrapper.properties
文件:这个压缩包也可以自己下载,不用6.8.3版本的,用自己下载的版本也可以。我这里用6.8.3版本的压缩包,是因为,Spring5.3.8源码默认用的是6.8.3版本的gradle!
cmd
,执行命令:gradlew :spring-oxm:compileTestJava
,去预编译spring-oxm模块!gradlew :spring-core:compileTestJava
,并等待命令执行结束:到这儿,使用IDEA + Gradle构建Spring5源码就已经全部完成。
最后一部,就是去验证一下我们搭建的Spring源码环境是否可以正常运行:
build.gradle
文件指定位置加入如下代码:compile(project(":spring-context"))
compile("org.aspectj:aspectjrt:1.9.5")
compile("org.aspectj:aspectjweaver:1.9.5")
这里其实就相当于maven工程的pom.xml文件,加入上述代码的目的是为了在子模块my-spring-test中引入spring-context模块的依赖。
测试主函数类:
/**
* date: 2021/5/13
* @author csp
* 测试主函数类
*/
public class Main {
public static void main(String[] args) {
// 读取spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-test.xml");
// 获取service的bean对象
UserService userService = (UserService) context.getBean("userService");
// 执行service方法查询user对象
User user = userService.getUserById(1);
// 输出user结果
System.out.println(user);
}
}
User实体类:
/**
* date: 2021/5/13
*
* @author csp
* User实体类
*/
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
service接口:
/**
* date: 2021/5/13
* @author csp
* service接口
*/
public interface UserService {
User getUserById(int id);
}
service接口实现类:
/**
* date: 2021/5/13
* @author csp
* service接口实现类
*/
public class UserServiceImpl implements UserService {
@Override
public User getUserById(int id) {
User user = new User();
user.setAge(22);
user.setName("兴趣使然の草帽路飞");
return user;
}
}
resources下新建spring配置文件spring-text.xml:
<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 id="userService" class="com.myspring.test.UserServiceImpl"/>
beans>
参考文章:https://www.cnblogs.com/mazhichu/p/13163979.html