spring框架源码阅读及调试环境的搭建

相信很多小伙伴都阅读过spring的源码,但是搭建spring源码阅读及调试环境的时候应该踩过不少坑吧,在这里特意记录一下整个过程,留给有需要的人看吧,好了,那我们就开始吧。

准备

spring源代码下载

首先下载spring框架源代码,可以从GitHub或者Gitee上下载,本文下载的spring版本是5.3.7

  • GitHub地址:https://github.com/spring-projects/spring-framework.git
  • Gitee地址:https://gitee.com/mirrors/Spring-Framework_old1.git(这个国内的会快一些)

gradle下载

spring框架使用gradle进行构建和jar包管理,使用gradle这个构建工具的主要原因是减少项目构建所需要的时间,gradle比maven要快,所以需要先下载gradle和配置gradle。

  • 官网地址:https://gradle.org/

注意:gradle和spring是有版本关联的,建议根据spring源码里的gradle版本进行下载和配置,不然会产生很多麻烦。

可以在spring源码里找到使用的gradle版本,路径:Spring-Frameworkgradlewrappergradle-wrapper.properties,这里我们可以看到spring5.3.7版本可以使用gradle6.8.3版本。spring框架源码阅读及调试环境的搭建安装步骤:

  1. 下载完gradle解压存放目录最好不要有中文,然后配置环境变量。
  2. 配置到系统变量 右键点击电脑>属性>高级系统设置>高级>环境变量>系统变量

2.1 新建变量 GRADLE_HOME=D:softgradle-6.8.3spring框架源码阅读及调试环境的搭建2.2 加入到环境变量Path里 %GRADLE_HOME%binspring框架源码阅读及调试环境的搭建

  1. 使用gradle -v命令确认是否安装配置成功,如下所示即gradle安装完成。
spring框架源码阅读及调试环境的搭建
image.png

JDK

这里jdk版本建议使用jdk11以上的啊,jdk8版本的话可能编译的时候会有类找不到的情况,jdk的下载和安装可自行网上搜索,不再本次内容里。

IDEA

建议使用高版本的IDEA,我使用的是idea2022.3.2版本,低版本的可能会涉及版本不兼容的问题,比如低版本的不支持jdk11或者跟gradle插件版本不兼容等问题。我是在idea3019.3.4折腾了一天,最后发现是gradle插件版本不兼容的问题导致编译不成功,换成idea2022.3.2版本就解决了。

版本不对的话会提示各种错误,比如 如果Gradle版本不对,会报各种各样的错误,比如:

  • (1)Only Project build scripts can contain plugins {} blocks
  • (2)This version of the JMH Gradle plugin requires Gradle 6+

可以从idea安装路径里看gradle版本,IntelliJ IDEA 2019.3.4pluginsgradlelib,这里我们看到idea2019.3.4版本使用的是gradle5.x的版本spring框架源码阅读及调试环境的搭建IntelliJ IDEA 2022.3.2pluginsgradlelib,这里我们看到idea2022.3.2版本使用的是gradle7.x版本,比我使用的6.8.3版本的gradle高,是兼容的。spring框架源码阅读及调试环境的搭建准备阶段完成,接下来我们开始折腾spring源码吧。

spring源码配置调整

spring源码里有些配置可以调整下,这样可以加快我们的编译速度,主要是选用国内的仓库。

  1. 调整spring源码目录下,gradlewrappergradle-wrapper.properties文件的distributionUrl,spring默认是从官网下载的gradle,比较慢,因为之前我们自己已经安装了,所以可以换成我们自己的地址。

spring框架源码阅读及调试环境的搭建更改distributionUrl,换成我们本地的地址,如下:spring框架源码阅读及调试环境的搭建

  1. 在源码目录下,build.gradle文件中,我们替换一下仓库地址,使用阿里云的镜像地址会快些。

spring框架源码阅读及调试环境的搭建把这个repositories修改成这样spring框架源码阅读及调试环境的搭建

repositories {
   // 新增2个阿里镜像地址
   maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
   maven { url 'https://maven.aliyun.com/repository/spring' }
   maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
   mavenCentral()
   maven { url "https://repo.spring.io/libs-spring-framework-build" }
   // 新增spring插件库
   maven { url "https://repo.spring.io/plugins-release"}
  }
  1. 在源码目录下,settings.gradle文件里同样替换一下repositories。

spring框架源码阅读及调试环境的搭建把这个repositories修改成这样spring框架源码阅读及调试环境的搭建

pluginManagement {
 repositories {
  maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
  maven { url "https://maven.aliyun.com/repository/public" }
  gradlePluginPortal()
  maven { url 'https://repo.spring.io/plugins-release' }
 }
}
  1. 在源码目录下,gradle.properties调整一下jvm堆大小以及gradle后台执行

spring框架源码阅读及调试环境的搭建修改:org.gradle.jvmargs=-Xmx2048M 新增:org.gradle.configureondemand=true org.gradle.daemon=true 这样我们需要修改的配置就完成了。

导入IDEA编译调试

接下来我们就按源码目录下import-into-idea.md这个文档的操作步骤导入到idea里吧。

  1. 编译oxm

在源码目录下,打开cmd窗口,执行命令:gradlew :spring-oxm:compileTestJava,看到绿色的BUILD SUCCESSFUL就说明执行成功啦。spring框架源码阅读及调试环境的搭建

  1. 打开idea并导入,File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle

这里要说的是,导入时我们先停止build,先做下配置spring框架源码阅读及调试环境的搭建spring框架源码阅读及调试环境的搭建

  1. 打开idea的gradle工具栏,把spring-aspects忽略掉
spring框架源码阅读及调试环境的搭建
image.png
  1. 然后刷新gradle,等待依赖包下载完成。
spring框架源码阅读及调试环境的搭建
image.png
  1. 编译,找到gradle工具栏,双击spring->Tasks->build->build执行整个工程的编译

spring框架源码阅读及调试环境的搭建编译需要一段时间,看到“BUILD SUCCESSFUL”即编译成功。spring框架源码阅读及调试环境的搭建

  1. 新建一个demo工程

到这里源码编译就完成了,接下来我们创建一个自己的工程,引用spring的相关模块,看看运行结果吧 选择File菜单,点击Project Structure,点击+,新建一个gradle项目,输入项目名下一步输入包名、存放路径等信息后就完成了。spring框架源码阅读及调试环境的搭建修改demo工程的build.gradle,完整如下:

plugins {
    id 'java'
}

group 'org.springframework'
version '5.3.7-SNAPSHOT'

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

先写一个service类:

package com.star95.springframework.service;

import org.springframework.stereotype.Service;
@Service
public class TestService {
    public void sayHello() {
        System.out.println("hello spring!");
    }
}

再写一个扫描配置类:

package com.star95.springframework.config;

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

@ComponentScan("com.star95.springframework")
@Configuration
public class CommonConfig {
}

最后写一个测试类:

package com.star95.springframework;

import com.star95.springframework.config.CommonConfig;
import com.star95.springframework.service.TestService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class AnnotationContextTest {
 public static void main(String[] args) {
  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(CommonConfig.class);
  TestService testService = (TestService) context.getBean("testService");
  testService.sayHello();
 }
}

好了,这时候就可以运行了,接下来我们看看常见的错误以及如何处理吧。

错误1:Kotlin: warnings found and -Weeror specified

spring框架源码阅读及调试环境的搭建网上有的说缺少 cglib 和 objenesis 包需要重新编译,双击这两个task即可。spring框架源码阅读及调试环境的搭建spring框架源码阅读及调试环境的搭建但是貌似不生效,这时可以找到spring-context,spring-core,spring-beans这几个module,点击main下的Kotlin,把右面的参数 -Werror去掉,也就是关闭Kotlin的-Weeror校验即可解决。spring框架源码阅读及调试环境的搭建

错误2:程序包jdk.jfr不存在

涉及jdk版本的地方都使用jdk11(jdk8里是没有这个包的)spring框架源码阅读及调试环境的搭建

错误3:找不到符号 变量 CoroutinesUtils

这时选择File->Project Structure->Libraries,点击加号选择Java找到spring core包下编译后的kotlin包,位置在spring-corekotlin-coroutinesbuildlibskotlin-coroutines-5.3.7-SNAPSHOT.jar,点击确定。spring框架源码阅读及调试环境的搭建spring框架源码阅读及调试环境的搭建选择应用到spring-core的模块即可。spring框架源码阅读及调试环境的搭建

运行成功

常见的错误解决后,我们运行main函数,应该就可以输入”hello spring!”了,到这里就大功告成啦,打完收工。spring框架源码阅读及调试环境的搭建接下啦我们就可以愉快的debug调试源码了。spring框架源码阅读及调试环境的搭建


原文始发于微信公众号(小新成长之路):spring框架源码阅读及调试环境的搭建

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/238599.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!