spring源码构建spring源码环境

下载安装gradle

gradle-src为gralde源码,gradle-bin为安装包。

解压gradle-bin到目录。

配置

配置环境变量到path,配置仓库:gradle默认的本地仓库,新增GRADLE_USER_HOME,路径配置成需要的本地仓库路径即可。

github官网下载spring5.0x源码

构建:

导入到idea,选择gradle路径,配置对应的目录。

打开import-into-idea.md文件,文件中介绍导入到idea的介绍。

注(翻译):

1
2
3
4
5
6
 a,因为其他项目需要依赖spring-core和spring-oxm,所以我们导入后需要先编译这两个包

b,spring-aspects需要依赖三方jar(精通aop的应该知道spring-aop和aspectj的关系,在使用注解方式实现spring-aop的时候,需要导入aspectj的jar,有兴趣的可以去查阅下官方文档aop相关文档),这里编译可能会报错,不影响我们编译使用,我们先不处理

c,使用工具编译时,可能会出现内存溢出情况,这里我们编译时需要增加相关参数
-XX:MaxPermSize=2048m -Xmx2048m -XX:MaxHeapSize=2048m
导入构建

步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1、spring源码包中 build.gradle    

repositories属性添加 阿里云的仓库
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
mavenCentral()

开始的 buildscript {
repositories {
中添加:
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
maven { url "https://maven.aliyun.com/nexus/content/repositories/spring-plugin" }

2、在idea中打开项目,设置好gradle路径。构建完成(耗时)

先编译 spring-core和spring-oxm

出现的问题:

1、构建错误:No such property: immutableValues for class: org.gradle.api.internal.tasks.DefaultTaskDependency

1
2
把spring-beans中文件spring-beans.gradle的注释:
//compileGroovy.dependsOn = compileGroovy.taskDependencies.values - "compileJava"

2、Could not find method useJUnitPlatform()

1
2
3
4
5
注释:spring-test.gradle中这行代码
// useJUnitPlatform {
// includeEngines 'junit-jupiter'
// excludeTags 'failing-test-case'
// }

3、spring core核心代码报错

1
2
3
4
cmd进入该目录 
.....spring-framework-5.0.x\spring-core
执行:
gradle build会生成两个核心jar包

4、kotlin编译导致的问题

1
2
3
4
5
Circular dependency between the following tasks:
:spring-beans:compileGroovy
\--- :spring-beans:compileJava
\--- :spring-beans:compileKotlin
\--- :spring-beans:compileGroovy (*)

编译github的最新spring源码发现该问题,主要是kotlin版本不一致导致的

20200420223223

两处修改为一致

20200420223237

5、Calls to static methods in Java interfaces are prohibited in JVM target 1.6. R

20200420223653