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地址
如图

 源码下载可以直接下载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版本

修改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

然后等待几分钟

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

导入项目到idea中

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

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

 gradle设置:

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

添加测试模块代码

 选择gradle

编写代码测试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();

	}
}

正确输出:

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

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

 解决:

将jar包添加到sping.aop:main

 

同样其他类似缺少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博客

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值