记录编译spring-framework源码的几个坑

3,085 阅读3分钟

使用的spring源码版本:5.2.X

编译器:Idea

问题一:gradle编译失败,提示依赖版本错误的信息

解决方式: 使用gradle/wrapper/gradle-wrapper.properties配置文件里面声明的gradle版本进行编译

问题二:编译时checkstyle报错

我修改了源码之后再进行的编译,有部分编码格式不符合spring内置的checkstyle规范,所以报错.

解决方式: 先解决具体的报错,然后安装checkstyle插件,一旦每次有错误就能在编码阶段立即发现,不会等到编译的时候再报错.checkstyle的配置文件路径为:spring-framework/src/checkstyle.此目录下有两个文件,一个是checkstyle规则配置,一个是告警屏蔽文件.

配置checkstyle参考博客: blog.csdn.net/hbxtw/artic…

但是直接导入spring内置的checkstyle.xml会有两个问题

  • 需要输入一个 property name,这里输入屏蔽文件的路径即可

  • 导入时报错无法初始化类:

这个报错是因为idea的当前checkstyle插件版本不支持某些spring提供给的checkstyle规则集,解决方法是在checkstyle.xml找到对应的规则然后注释掉,这样可能还有部分功能缺失,不过大部分编码格式问题都能在写代码时候发现.

另一种方式是试试其他版本的idea checkstyle插件,看能否支持这些报错规则,不过我尝试了一些版本仍然是不行的,目测是因为spring的checkstyle文件里面有spring的自定义规则.

问题三:在Spring源码新建工程的类报错:" 错误: 找不到符号"

我的工程是建在和spring-context同级的,但是却找不到这些依赖,报错找不到符号

经过一系列的排查,最后确定原因为我的gradle配置文件设置的不对,有几点需要注意

  1. 我的子工程是通过idea建的,所以工程的gradle文件名称自动的就是build.gradle,但是子工程的名字应该是artifactid.gradle.以我的给工程为例:我的artifactid为application,那命名就应该为application.gradle
  2. application.gradle的配置内容应该和其他子工程保持一致,如果整个项目是通过idea自动生成的,就可能存在这个问题.下面对比一下有问题的和没问题的gradle配置 左右侧分别为修改前后的gradle配置:

  1. 如果还有报错,可能是自己写的代码依赖的子模块没有编译,自己去编译一次就能消除标红报错.使用方式为在idea的gradle页签去点击build,如图所示.

  1. 编译时,注意如果前置的模块没有编译要先编译前置的模块.比如在编译spring-context标红报错,那就要看标红是不是前置模块没有编译引起的,假如标红的是spring-beans模块的话,先编译spring-bean模块,其他模块同理.注意编译的前后顺序,这里贴一张spring官方的架构图: 官方说明,内含架构图