Spring-frameWork-5.0.x源码编译踩坑


spring是java开发工程师避不过去的常用开发框架,能够提供方便的对象管理、低耦合面向切面、对上集成springMvc,Stucts,对下集成Mybatis,Hibernate框架,等等这些功能都对日常的开发帮助很大,但是想深入了解spring的原理、高级功能以及设计思想必须能够本地编译spring源码并将之运行起来,但是这一步基本都卡住了不少的人,当然,硬看代码的大佬除外哈。此文记录了本地编译spring源码的一些问题,最终将代码在本地跑起来。希望能给大家一点帮助。纯属娱乐,不喜勿碰。

代码下载

首先去GitHub上下载对应版本的spring代码,本文用到的是5.0.x,如下:
代码版本
然后打开build.gradle文件,找到spring使用的gradle版本(spring-5.0.x使用的是gradle-4.4.1),为下一步安装gradle做准备,版本入下:
spring使用的grale版本

Gradle安装

首先下载对应版本gradle并安装,下载安装文件就不过多的做介绍,下载安装包解压即可,详情自行搜索;需要注意的是,安装过后需要配置环境变量、修改远程仓库源地址为国内镜像,同时配置本地仓库地址。

配置环境变量、配置本地仓库地址

需要在环境变量值配置GRADLE_HOME环境变量和CRADLE_USER_HOME来配置文档仓库路径。
在这里插入图片描述

修改镜像仓库为国内镜像

在gradle的安装目录的init.d目录下创建init.gradle文件,内容如下:
在这里插入图片描述
文件内容:

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

到此,gradle安装完成

项目导入

代码下载到本地之后,导入idea,步骤如下,选择import project 选择本地代码路径,然后
选择import project from extenal model 选择Gradle,如下图
在这里插入图片描述
点击下一步,具体配置如下图
在这里插入图片描述
完成配置之后等待代码下载依赖以及编译,此处耗费很长时间,耐心等待,一两个小时是有可能的。但是一般编译或者下载依赖有问题都是正常的不要惊慌,一个个解决,我遇到的问题记录如下。

问题解决

编译时长过长或者编译报javadoc.options的错误

如果编译报如下错误,或者编译时间过长,找到build.graldle文件,注释掉里面的archives sorcesJar 和 archivesjavadocJar,问题如下图:
在这里插入图片描述
解决方式如下图:
在这里插入图片描述
在这里插入图片描述

自己建的子项目编译报错

错误如下,排查发现依赖了不需要的spring-webflux,在对应项目的.gradle文件中注释掉即可
在这里插入图片描述
解决方案如下图:
在这里插入图片描述

项目编译成功运行报错

项目编译成功后运行报错找不到对应的类,排查发现包含这些源码的工程没有引入到相应子工程,添加依赖即可,问题如下
在这里插入图片描述
解决方式如下:
在这里插入图片描述

编译一直报javadoc相关的错误

找到build.gradle中的javadoc配置,直接配置忽略编译时候的javadoc异常,可以解决大部分问题,配置如下图。
在这里插入图片描述

项目字符集要与工程配置的一致

找到build.gradle中关于字符集的配置,如下图:
在这里插入图片描述
都是UTF-8,那么idea中对于项目字符集配置也要是UTF-8,不让编译一直包字符集错误,特别是自己看代码加了中文注释之后,配置如下图:
在这里插入图片描述

项目镜像仓库更换国内镜像

项目编译下载依赖的时候spring的原生镜像仓库在近段时间下载需要认证,所以有些jar包或者插件下载会包401认证错误,将build.gradle文件关于镜像仓库的配置改为国内镜像即可。一般有两处如下图所示:

buildscript {
   
	repositories {
   
		maven {
    url 'https://repo.spring.io/plugins-release' }
		maven {
    url "https://maven.aliyun.com/repository/apache-snapshots" }
		maven {
    url "https://maven.aliyun.com/repository/spring" }
		maven {
    url "https://maven.aliyun.com/repository/google" }
		maven {
    url 'https://maven.aliyun.com/repository/central'}
		maven {
    url "https://maven.aliyun.com/repository/public" }
		mavenCentral()
		maven {
    url "https://repo.spring.io/libs-spring-framework-build" }

}
	dependencies {
   
		classpath("io.spring.gradle:propdeps-plugin:0.0.8")
		classpath("io.spring.gradle:docbook-reference-plugin:0.3.1")
		classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16")
		classpath("org.asciidoctor:asciidoctorj-epub3:1.5.0-alpha.7")
	}
}
repositories {
   
//		maven {
    url "https://repo.spring.io/libs-release" }
		maven {
    url "https://maven.aliyun.com/repository/apache-snapshots" }
		maven {
    url "https://maven.aliyun.com/repository/spring" }
		maven {
    url "https:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仔仔1993

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值