赞
踩
在我第一次搭建Spring的源码环境的时候遇到了很多坑,这里写个文档帮助同样想搭建Spring源码环境的同学避坑。
在尝试多次之后,我选择了Spring 5.2.x来进行搭建,Gradle版本这里也建议5.6.3,因为直接选择master分支的话,构建的时候会有很多问题,可能还需要高版本JDK,相信很多同学JDK都是1.8版本的,5.2.x我也是使用的JDK1.8,全程搭建下来也没有什么大问题,大家跟着我一步一步搭建即可。
如果有同学想要编译好,可以直接导入Idea的源码,可以点击打开链接,自行下载。
git
使用git clone 从GitHub上把源码拉取下来(注意:最好选择使用git从远程拉取下来,不然使用zip包直接下载的话,后面会有小问题)
命令(注意拉取的时候,要具体选择某一分支,不选择的话,默认拉取的是master分支,如果你也想搭建Spring 5.2.x的话,可以直接使用我下面命令)
git clone -b 5.2.x https://github.com/spring-projects/spring-framework.git
Gradle
查看拉取项目的Gradle版本,然后下载配置Gradle
3.打开https://gradle.org/releases下载对应版本Gradle(Spring 5.2.x 推荐Gradle版本5.6.3)
4.下面之后配置Gradle环境变量
5.Path环境变量里添加一条
%GRADLE_HOME%\bin
6.配置好之后把原来下载Gradle的那行代码注释掉,重新写上自己下载下来的Gradle zip包,这样可以避免重复下载Gradle包
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
#distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
distributionUrl=file:///d:/Environment/gradle-5.6.3-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
使用Idea,直接open选中源码项目打开即可,注意打开Idea应该会自动加载,全部点取消
打开项目之后,【File】->【Settings】,设置Gradle,Gradle user home这个目录这里我设置的刚 安装的gradle目录。如果不设置的话,它默认是C:\Users\用户名\.gradle,这个目录你就可以认为相当于 是我们的本地的maven仓库,gradle编译项目所依赖的jar都会下载后放入这个目录中。JVM默认我这里就是jdk8,jdk至少就是jdk8。
5.打开build.gradle文件(这个就相当于是maven的pom文件),在文件头部加上Spring插件库
buildscript {
repositories {
maven { url "https://repo.spring.io/plugins-release" }
}
}
6.然后往下继续寻找,找到如下代码段,添加对应代码,配置阿里云镜像加速依赖下载,新增Spring插件库
//新增以下2个阿里云镜像
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
//新增spring插件库
maven { url "https://repo.springsource.org/plugins-release" }
7.都修改好之后,保存一下,点击页面下图刷新图标,等待项目下载依赖构建即可,如果有报错多刷新几遍
8.如果有报如下错误的,可以把之前添加的spring插件库代码注释掉试一试。
报错:Could not HEAD 'https://repo.spring.io/plugins-release/io/spring/ge/conventi……
解决办法:把之前添加的下面两段spring插件库代码注释掉试一试
buildscript {
repositories {
maven { url "https://repo.spring.io/plugins-release" }
}
}
//新增spring插件库
maven { url "https://repo.springsource.org/plugins-release" }
9.构建成功之后,找到 ApplicationContext 类,打开后,按下Ctrl+Alt+U键,如果出现下图所示类图界面说明构建成功了!(构建过程就是找依赖对象的过程)
此时可以查看Spring的源码了,但是我们需要在源码的基础上面进行修改,开发,调试,添加注释等等 操作,所以需要将源码进行编译打包,下面我们将进行编译源码编译
10.先编译spring-oxm下的compileTestjava,选中双击即可,编译完成出现BUILD SUCCESSFUL代表编译完成
11.保险起见再编译下spring-core模块,因为之后的spring-context依赖于core,方法同上。
12.都编译完成且成功之后,最后开始编译整个工程(这个过程非常耗时间),打开顶层项目spring->build->build,双击开始编译
13.都编译成功之后,可以添加一个测试模块进来,进行测试源码构建编译是否真的完成
步骤:【File】->【New】->【Module…】 在Spring中添加自己的module模块,同样选择gradle构建。
14.找到我们自己的测试模块test,打开build.gradle文件(相当于是pom文件),默认 dependencies依赖(这里的dependencies和maven里的依赖是一样的)我们需要手工添 加spring-context,spring-beans,spring-core,spring-aop这4个核心模块,具体如下:
dependencies {
//添加完要构建一下,否则代码中无法引用,注意不要忘了
compile(project(":spring-context"))
compile(project(":spring-beans"))
compile(project(":spring-core"))
compile(project(":spring-aop"))
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}
15.下面编写一个简单的applicationContext获取容器用的bean,主要是测试Spring源码构建编译过程是否成功!
建立实体类User.java
package xl.test; /** * @author Xl * @date 2022/4/9 - 0:54 * @Description: */ public class User { private String id; private String userName; public User() { } public User(String id, String userName) { this.id = id; this.userName = userName; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String toString() { return "User{" + "id='" + id + '\'' + ", userName='" + userName + '\'' + '}'; } }
新建JavaConfig.java (使用注解的方式声明bean)
package xl.test; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; /** * @author Xl * @date 2022/4/9 - 0:55 * @Description: */ @Configuration @ComponentScan public class JavaConfig { @Bean public User user(){ return new User("001","Jack"); } }
最后编写一个测试类Test.java
package xl.test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * @author Xl * @date 2022/4/9 - 0:59 * @Description: */ public class Test { public static void main(String[] args) { System.out.println("hello"); AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class); User user = (User) context.getBean("user"); System.out.println(user.toString()); } }
运行结果
如果觉得我的文章对你有帮助的话的话就点个赞吧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。