Spring源码学习(四)--Spring源码编译(IDEA)

准备工作

本示例基于 SpringV5.2.18RELEASE+GradleWapper+jdk1.8.0_101编译

环境准备

  • gradle

        gradle我没有自己单独安装,使用的是GradleWapper中的gradle,当然也可以自己下载

  • idea 2020.1.3

        idea破解:大家自行百度

  • jdk8+

源码下载

进入GitHub - spring-projects/spring-framework: Spring Framework

Spring的源码是发布在github上面的,由于需要从国外下载,速度可能会慢

可以使用gitee git下载

gitee地址
如图

Spring源码学习(四)--Spring源码编译(IDEA)_第1张图片

 源码下载可以直接下载zip包,也可以使用git clone

我是直接下载的zip包

构建工具准备:

安装源码对应的gradle版本(也可不安装),建议使用gradleWraper中的gradle。

Gadle介绍

Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。

Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。Gradle Wrapper是Gradle项目的一部分。

gradleWraper在该文件中有体现,相当于远程自动下载gradle到本地(所以你可以下载gradle,也可以不下,因为可以使用gradleWraper远程的统一版本):spring-framework-5.2.18.RELEASE\gradle\wrapper\gradle-wrapper.properties

所以如果你需要下载也最好下载该链接对应的gradle版本

Spring源码学习(四)--Spring源码编译(IDEA)_第2张图片

修改build.gradle

这个文件就相当于我们Maven的pom.xml 管理项目的依赖等信息...

设置镜像

		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" }
		}

编译工作

按照官网的方式编译:

使用gradlew(gradle-wrapper命令) 先编译oxm:compileTest Java: Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava

编译compileTestJava模块

打开源码所在文件夹,在windows cmd命令中输入

gradlew :spring-oxm:compileTestJava

第一次运行上面命令,如果没有自己安装gradle,它会自动去下载gradleWraper中对应版本的gradle

然后等待几分钟

Spring源码学习(四)--Spring源码编译(IDEA)_第3张图片

 git的报错是因为我是直接下载的zip包,使用git clone应该不会有这个报错

导入项目到idea中

 导入项目到idea中:Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)

Spring源码学习(四)--Spring源码编译(IDEA)_第4张图片

选择spring源码的文件夹,然后项目类型选择gradle 

Spring源码学习(四)--Spring源码编译(IDEA)_第5张图片

 gradle设置:

Spring源码学习(四)--Spring源码编译(IDEA)_第6张图片

 导入后等待编译,莫急,需要一点点时间,编译完成:

Spring源码学习(四)--Spring源码编译(IDEA)_第7张图片

添加测试模块代码

Spring源码学习(四)--Spring源码编译(IDEA)_第8张图片

 选择gradle

Spring源码学习(四)--Spring源码编译(IDEA)_第9张图片

Spring源码学习(四)--Spring源码编译(IDEA)_第10张图片

编写代码测试ioc功能

        添加依赖

        在新建模块的build.gradle下添加依赖

dependencies {
    compile(project(":spring-context"))
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

compile(project(":spring-context")) 代表本项目的

        随意添加任意bean

package com.fztx.beans;

import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl {
	public void sayHi() {
		System.out.println("Hello");
	}
}

        添加配置类

package com.fztx.beans;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.fztx")
public class MyConfig {
}

        测试类

package com.fztx.beans;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MyTest {
	public static void main(String[] args) {
		ApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
		UserServiceImpl bean = context.getBean(UserServiceImpl.class);
		bean.sayHi();

	}
}

正确输出:

Spring源码学习(四)--Spring源码编译(IDEA)_第11张图片

 但是现在是用gradle bulid和运行的,每次都很慢,所以可以修改一下编译方式,使用idea编译运行

Spring源码学习(四)--Spring源码编译(IDEA)_第12张图片

修改完之后再运行会有报错

Spring源码学习(四)--Spring源码编译(IDEA)_第13张图片 解决:

将jar包添加到sping.aop:main

Spring源码学习(四)--Spring源码编译(IDEA)_第14张图片

Spring源码学习(四)--Spring源码编译(IDEA)_第15张图片 Spring源码学习(四)--Spring源码编译(IDEA)_第16张图片

同样其他类似缺少jar的问题也是一样,看报错信息是再编译那个moudle时缺少哪个jar

其他常见问题:

1.Error:(354, 51) java: 找不到符号
符号: 变量 CoroutinesUtils
位置: 类 org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar
2.程序包jdk.jfr不存在
3.缺少 cglib 和 objenesis 包
Kotlin: warnings found and -Weeror specified

 可参考:Spring源码下载编译阅读_zjssoul的博客-CSDN博客

最后,成功运行,大功告成!

Spring源码学习(四)--Spring源码编译(IDEA)_第17张图片

你可能感兴趣的:(Spring源码,spring)