分类: Java
2021-09-21 01:22:05
distributionUrl=file\:///Users/xxxx/Desktop/tool/gradle-6.8.3-all.zip
6. 在将Spring源码导入到idea之前,我们还有一些准备工作需要做。
在Spring源码中提供了导入ide开发工具的md文档,主要是这两个文件
我们将要导入的是idea,所以查看一下下面的md文件,文件中提到由于其它组件对于spring-oxm以及spring-core组件有依赖,所以我们需要提前编译这两个组件。
具体需要到这两个组件对应的代码目录下,执行如下gradle命令,完成这两个组件的预编译。
./gradlew :spring-oxm:compileTestJava
./gradlew :spring-core:compileTestJava
1.采用下面方式导入工程
然后使用gradle方式导入源码
导入完成后,系统就会自动导入依赖
1.4 创建测试module测试我们编译的Spring源码是否可以正常调用
1. 由于我们的Spring项目采用的是gradle的方式进行编译,所以我们新建项目的时候,需要采用gradle的方式进行创建。
2. 测试模块创建完成后,需要到该测试模块的gradle配置文件中添加对于spring-context组件的依赖
package com.whq.config;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.whq")
public class AppConfig {
}
package com.whq.service;
import org.springframework.stereotype.Service;
@Service
public class HelloService {
public void Hello(){
System.out.println("Hello, World");
}
}
package com.whq;
import com.whq.config.AppConfig;
import com.whq.service.HelloService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class SpringTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
HelloService helloService = ac.getBean(HelloService.class);
helloService.Hello();
}
}
4. 代码编译方式修改
如果不进行修改,默认idea是采用gradle的方式,进行编译,然后输出测试module主函数的输出内容,但是这种方式比较慢,我们可以通过修改配置,直接采用idea自带的方式进行编译,提高编译速度,配置方式如下图第二个红框所示
其它两项配置推荐读者同样配置好。
这两个配置的含义是:
第一个配置指定的是gradle的安装目录,我这里没有修改,固定安装在用户目录的 .gradle目录下
第二个配置指定的是gradle的具体安装位置以及gradle的jvm版本,这里我们指定的是我们本地安装的gradle目录。
但是读者可能奇怪的是,我们其实没有安装过gradle,怎么指定gradle的安装目录,
前面我们进行了一项配置,指定了需要安装的gradle的zip路径。然后Spring源码下载依赖的时候,会获取到我们指定的gradle压缩包,然后解压安装到
我们此处指定的gradle home下,具体安装目录如下
/Users/xxxx/.gradle/wrapper/dists/gradle-6.8.3-bin/7ykxq50lst7lb7wx1nijpicxn/gradle-6.8.3
其中7ykxq50lst7lb7wx1nijpicxn 这个是随机生成的,每个人应该不一样。目录就将这个地址填入就行。
对于配置jdk11的原因,是后续代码编译的时候会报一个类找不到的错误,原因是这个类是在jdk11中才有定义,jdk8中没有,需要配置此处的一个jdk版本。
同时更重要的是需要指定项目jdk编译的版本类型为11,所以还需要配置项目的jdk编译版本,如下:
5. 其实在编写测试module代码中,就可以看到Spring源码是否导入成功。
具体方式是当我们调用AnnotationConfigApplicationContext 以及使用@Configuration时候,idea是否有提示。如果有提示的话,代表最起码源码导入成功了,已经很接近成功了。如果没有提示,那就麻烦了,我想当初调试的时候,这个部分也是卡主我好几天,直到现在也没有找到根本解决的方法,大家如果有解决方法可以在评论中分享一下。
后来,我找到一个规避方法,就是在创建一个新的测试项目,然后发现原来的测试项目中,idea就会提示这些类,但是新增的项目还是没有提示。 哈哈哈哈。 我猜想可能是那个地方我还是没有配置到位,导致没有及时刷新依赖。但是新建一个module后,项目整个刷新,就会导致原先新增的项目中的依赖刷新完成,可以正常使用。
这个问题,我是参考了这篇博文解决的,感谢大神分享:
https://blog.csdn.net/Kermit_father/article/details/106344933
2. Error:(354, 51) java: 找不到符号
符号: 变量 CoroutinesUtils
位置: 类 org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar
这个问题,我是参考了这篇博文解决的,感谢大神分享:
https://blog.csdn.net/gooaaee/article/details/104437902
这篇博文的问题解决方法真是解决了我的燃眉之急,文章中还介绍了其它问题的解决方法,但是我没有遇到过,大家可以参考。
因为写这篇文章的时候,已经是在我搭建好环境一个月之后了,搭建过程中好多问题,我都已经忘记了,只是记录了一些比较典型的问题,大家如果有其他问题,欢迎在评论中提出来,我们一起参照解决。
后续,我会继续分享一些我学习spring源码的心得体会,感谢大家的浏览查阅。