IDEA导入spring源码5.0x
1.前期准备:
1.IDEA 2020.1.2
2.spring源码5.0x
源码下载链接:https://github.com/spring-projects/spring-framework/tree/5.0.x
3. Gradle 版本:4.4.1
2.下载spring 5.0x源码
访问:https://github.com/spring-projects/spring-framework/tree/5.0.x
下载很慢的话使用点科学的东西,你懂得!
下载完成后进行解压。
解压后找到 gradle/wrapper/gradle-wrapper.properties 用记事本打开,可以看到:
3.下载 Gradle:
复制链接,把反斜杠 \ 删除,访问链接,下载对应的 Gradle 版本,下载完成后,再回来此文件,把这一行注释掉,改为自己下载的 zip 包,保存。
解压 刚才下载的 gradle zip文件。
再 D 盘任何目录下新建一个 gradle_repository 文件夹作为 gradle 的本地仓库,例如我的是:
再添加 gradle 的环境变量:
选择刚才解压的 gradle 和 新建的 gradle 仓库地址。
GRADLE_HOME = 你的gradle 解压路径
GRADLE_USER_HOME = 你新建的 gradle 本地仓库目录
双击 path ,新建 gradle 可执行文件路径 %GRADLE_HOME%\bin
测试 gradle 是否安装完成:
打开控制台,输入 gradle -v,若正常输出版本号则安装成功。
在 gradle 安装目录下,找到 init.d 目录下,新建 init.gradle 文件,注意,后缀是 gradle 文件,不是 txt 文件!
输入保存。
allprojects{
repositories {
def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
remove repo
}
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
remove repo
}
}
}
maven {
url ALIYUN_REPOSITORY_URL
url ALIYUN_JCENTER_URL
}
}
}
4.修改spring源码gradle编译镜像:
回到spring源码目录下找到 build.gradle 文件,打开:
搜索:repositories,共找到2处地方,都修改它。
maven { url 'file:///复制你自己本地的gradle仓库地址,就是你刚才新建的文件夹'}
mavenLocal()
maven { url "https://maven.aliyun.com/repository/public" }
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
maven { url "https://maven.aliyun.com/repository/spring" }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
搜索:configurations.all
allprojects {
repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
}
搜索:artifacts,里面的内容都注释掉。
回到spring源码目录下,找到 settings.gradle 文件,打开,添加以下代码保存:
pluginManagement {
repositories {
maven { url "https://maven.aliyun.com/repository/public" }
gradlePluginPortal()
maven { url 'https://repo.spring.io/plugins-release' }
}
}
5.编译 spring 源码:
在spring源码目录下打开,执行cmd:
gradlew build -x test
-x test 是 跳过测试test。
可能需要等几分钟或者几十分钟不等。如果没有出现编译失败,就没问题,中途也可以 ctrl + c 终止编译,后面任何时间再打开重新编译也可以。
6.IDEA导入spring源码
可以先打开任意一个自己的项目,然后进行先设置好 gradle,再进行导入:
等 IDEA 导入完成。
新建项目测试:
等待一会,可以看到setting.gradle 可以看到我们创建的模块了。
我们新建的模块 build.gradle 文件加 spring 包的导入:非常重要,不然你的测试类无法导包
// 添加代码
compile (project(":spring-aop"))
compile (project(":spring-beans"))
compile (project(":spring-context"))
compile (project(":spring-instrument"))
新建 Student 类
public class Student {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
}
新建 TestService 类:
@Component
public class TestService {
public void testMethod() {
System.out.println("Spring源码导入测试成功!");
}
}
resource下面添加 beans.xml 文件,并配置bean:
<?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 id="student" class="com.gxm.Student">
<property name="name" value="张三"/>
<property name="age" value="22"/>
</bean>
</beans>
新建一个 启动类 GxmTest 进行测试:
@Configuration
@ComponentScan("com.gxm")
public class GxmTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(GxmTest.class);
TestService testService = context.getBean("testService", TestService.class);
testService.testMethod();
ClassPathXmlApplicationContext context2 = new ClassPathXmlApplicationContext("beans.xml");
Student student = (Student) context2.getBean("student");
System.out.println(student.toString());
}
}
运行测试成功:
最后:
参考文章:
https://blog.csdn.net/weixin_44901327/article/details/130527598
https://blog.csdn.net/sco5282/article/details/118686000
https://cloud.tencent.com/developer/article/1632921
https://blog.csdn.net/yanyc0411/article/details/135047414
https://blog.csdn.net/qq_36437693/article/details/137809540
https://blog.csdn.net/qq_43372633/article/details/130867641