今天从公司图书角借到一本书, 名字叫 <<Spring源码深度解析>>, 抱着试着看的态度学习了下, 结果发现在使用idea搭建Spring源码环境时会出现很多问题, 而我的性格有时候又比执着. 所以还是花了将近一天时间把环境搭建好了. 现在将搭建过程重新梳理下, 希望能够帮助到其他人
shift
, 然后输入 get from
,选择第一个下载完毕后, 先不要急着构建, 需要我们先进行配置, 心急吃不了热豆腐~~~
进入gradle->wrapper->gradle-wrapper.properties
文件,将gradle改成本地distributionUrl=file:///E:/Download/maven_rep/gradle-4.9-bin.zip
注意路径不要有空格, 否则会报错
在根目录的build.gradle文件里(相当于maven的pom文件)找到150行左右的位置,将原来的repositories修改成如下配置:
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
maven { url "https://repo.spring.io/milestone" }
maven { url "https://repo.spring.io/plugins-release" }
}
继续修改 build.gradle 文件, 将 100行左右的-Werror
参数去除
如果不去除, 会在后面编译的时候发现警告后,将警告当成了错误来处理, 影响程序正常运行
在spring-beans模块下的spring-beans.gradle里,注释下面代码, 否则会报No such property: values for class: org.gradle.api.internal.tasks.DefaultTaskDependencies错误
完成上述工作之后,点击右上角刷新gradle的图标,开始重新构建(时间用时较长20min+)
点开org.springframework.context.ApplicationContext类,按下Ctrl+Alt+U
键,如果出现下图所示类图界面说明构建成功,构建过程就是找依赖对象的过程
首先编译spring-oxm模块
点击右上角gradle打开编译视图,找到springoxm模块,然后在Task -> other下双击compileTestjava
编译之后会报错, 大致内容如下
Circular dependency between the following tasks:
:spring-beans:compileGroovy
\--- :spring-beans:compileJava
\--- :spring-beans:compileKotlin
\--- :spring-beans:compileGroovy (*)
这里我们需要再次修改一下spring-beans模块下的spring-beans.gradle文件(覆盖掉配置第4步注释的内容)
def deps = compileGroovy.taskDependencies.immutableValues + compileGroovy.taskDependencies.mutableValues
compileGroovy.dependsOn = deps - "compileJava"
compileKotlin.dependsOn(compileGroovy)
compileKotlin.classpath += files(compileGroovy.destinationDir)
再次进行编译 compileTestjava
然后编译 spring-core模块, 按照步骤1 即可, 无需步骤2
编译整个项
新建gradle模块, 用于编写测试代码
新模块结构如下, 下面贴出相关代码
@Data
@ToString
@AllArgsConstructor
public class User {
private Integer id;
private String username;
}
----------------------------------------
@Configuration
@ComponentScan
public class BeanConfig {
@Bean
public User user(){
return new User(1,"hello,spring");
}
}
----------------------------------------
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new
AnnotationConfigApplicationContext(BeanConfig.class);
User user = (User)context.getBean("user");
System.out.println(user.toString());
}
}
运行main方法, 控制台输出如下
从上图可以看到, 控制台显示的中文信息全部以乱码的形式出现, 这是因为
org.gradle.jvmargs=-Dfile.encoding=UTF-8
-Dfile.encoding=UTF-8
附: 成功之后的控制台输出中文截图
参考博客 https://blog.csdn.net/qq_22172133/article/details/81513955 https://blog.csdn.net/foxException/article/details/108334235