Spring源码下载、保存、编译
- Spring源码下载
- Spring源码保存gitee仓库
- 1、需改远程仓库地址
- 2、将Spring源码推送到自己仓库
- Spring源码编译
- 1、新增下载源地址
- 2、修改gradle版本
- 源码编译时遇到的问题
- 1、找不到jar包的问题
- 2、JDK版本不对应的问题
- 3、编译时可能出现的警告
Spring源码下载
注意:Spring源码使用的是Gradle,而不是Maven。因此下载Spring源码之前可以先安装Gradle,注意安装的gradle版本与spring源码中gradle-wrapper.properties文件中指定的gradle版本一致。参考:Gradle的下载、安装和配置环境。
Spring源码gitee地址:https://gitee.com/mirrors/Spring-Framework。
Spring源码gitee仓库地址:
https://gitee.com/mirrors/Spring-Framework.git
Spring源码github地址:https://github.com/spring-projects/spring-framework。
Spring源码github仓库地址:
https://github.com/spring-projects/spring-framework.git
从远程仓库下载项目的流程,参考:idea下载git仓库中的项目
Spring源码保存gitee仓库
将下载的Spring源码保存到自己的gitee仓库中方便源码学习过程中对源码注释提交到gitee仓库。也可以保存调试Spring源码的测试代码。
gtiee个人仓库的创建参考:将本地项目提交到Gitee远程仓库。
1、需改远程仓库地址
选中Git中的Repository中的Remotes
将git仓库地址从Spring源码地址修改为自己的git仓库地址
2、将Spring源码推送到自己仓库
将spring源码推送到自己的远程仓库
Spring源码编译
1、新增下载源地址
在settings.gradle和build.gradle两个配置文件中新增阿里云仓库地址。
settings.gradle配置文件
repositories {
//spring源码中已有的配置
gradlePluginPortal()
//新增的阿里云仓库地址的配置
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
//新增的阿里云仓库地址的配置
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
//spring源码中已有的配置
maven { url "https://repo.spring.io/plugins-release" }
}
build.gradle配置文件
repositories {
//新增的阿里云仓库地址的配置
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
//新增的阿里云仓库地址的配置
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
//spring源码中已有的配置
mavenCentral()
//spring源码中已有的配置
maven { url "https://repo.spring.io/libs-spring-framework-build" }
}
2、修改gradle版本
修改gradle-wrapper.properties配置文件中的配置,可以修改gradle的版本和下载的gradle存放的位置。一般不做修改。
#distributionBase和distributionPath组合在一起,是gradle压缩包解压后的文件的存放位置。
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
#使用哪个版本的gradle,就在这里修改。gradle-##-all.zip是二进制版,只包含二进制文件(可执行文件)
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
#zipStoreBase和zipStorePath组合在一起,是下载的gradle的压缩包的存放位置
#环境变量GRADLE_USER_HOME的值
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
#gradle-##-all.zip是完整版,包含二进制文件、源代码文件和离线文档
#指定gradle的版本为本地存储的版本。
#distributionUrl=file:///D:/worktools/Gradle/gradle-7.2-all.zip
#将gradle-7.2-all.zip压缩包放到wrapper目录下。
#distributionUrl=gradle-7.2-all.zip
如果不想根据指定的路径去下载gradle。可以修改distributionUrl的值。
如果将gradle-7.2-all.zip压缩包与gradle-wrapper.properties配置文件放到同一目录下,那么直接指定distributionUrl=gradle-7.2-all.zip。弊端是:压缩包超过100M,无法推送到gitee上。
如果是指定本地存储的gradle,那么可以指定distributionUrl=file:///D:/worktools/Gradle/gradle-7.2-all.zip。弊端是:每个人本地存储路径不同。协作开发时,每个人都需要更改配置文件。
源码编译时遇到的问题
1、找不到jar包的问题
编译时,可以编译成功,但是会有jar包找不到的问题。
Errors occurred while build effective model from D:\worktools\Gradle\gradle_repository\caches\modules-2\files-2.1\com.alibaba\druid\1.2.6\c57198d77a31adf5bd36d35f9b12dc936b732587\druid-1.2.6.pom:
'dependencies.dependency.systemPath' for com.sun:tools:jar must specify an absolute path but is ${project.basedir}/lib/openjdk-1.8-tools.jar in com.alibaba:druid:1.2.6
'dependencies.dependency.systemPath' for com.sun:jconsole:jar must specify an absolute path but is ${project.basedir}/lib/openjdk-1.8-jconsole.jar in com.alibaba:druid:1.2.6
解决方案一:
根据报错信息中给出的路径找到文件,将文件中的依赖注释掉
<!--找不到以下两个jar包,将jar包的引入注释掉
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/openjdk-1.8-tools.jar</systemPath>
</dependency>
<dependency>
<groupId>com.sun</groupId>
<artifactId>jconsole</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/openjdk-1.8-jconsole.jar</systemPath>
</dependency>
-->
解决方案二:
根据错误信息中给出的缺少的jar包,如果本地有这个jar包,那么将systemPath中的路径修改为绝对路径即可。
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<!--将jar包路径修改为绝对路径-->
<systemPath>D:/worktools/jdk/jdk-11.0.11/lib/openjdk-1.8-tools.jar</systemPath>
</dependency>
<dependency>
<groupId>com.sun</groupId>
<artifactId>jconsole</artifactId>
<version>1.8</version>
<scope>system</scope>
<!--将jar包路径修改为绝对路径-->
<systemPath>D:/worktools/jdk/jdk-11.0.11/lib/openjdk-1.8-jconsole.jar</systemPath>
</dependency>
如果本地没有提示中缺少的jar包,如果必须使用该jar包,那么需要寻找jar包资源,将然后将存放jar的绝对路径写到配置文件中。如果不适用jar包中的内容,那么可以创建一个txt文件,命名为jar缺失的jar包名称,将后缀改为.jar,同样需要将jar包的绝对路径写到配置文件中。
2、JDK版本不对应的问题
本地配置的Java的环境变量的JDK版本要与spring源码要求的版本对应。不然会有一下错误:无效的源发行版:17。
我现在的最新的spring源码,使用的是jdk17。
在编译之前查看spring要求的JDK版本:查看Spring编译要使用的JDK。
注意:要修改Java的环境变量中的jdk版本,只修改项目使用JDK是无效的。
3、编译时可能出现的警告
编译时可能会有以下警告。
Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
在Settings中搜过async,然后将Instrumenting agent的勾选去掉,警告就没有了。