目录
06 基于Gradle搭建Spring环境
Pt1 资源准备
-
IntelliJ IDEA 2020.3.2 (Ultimate Edition)
-
Java version "11.0.10" 2021-01-19 LTS
-
Gradle 6.5
-
Spring 5.3.0-SNAPSHOT
Pt1.1 安装Gradle
(1) 下载Gradle
官网:https://gradle.org/releases/
推荐使用gradle4以上的版本,否则不知道是否会有别的兼容性问题。我这边是按照Spring5源码gradle-wrapper.properties中依赖的gradle,选了个相近的版本,gradle-6.5。
(2) 配置环境变量
gradle安装比较简单,将gradle目录配置到环境变量即可。
(3) 检测gradle环境
通过gradle -v 检测gradle是否正确安装。
C:\Users\tracy.chen>gradle -v
------------------------------------------------------------
Gradle 6.5
------------------------------------------------------------
Build time: 2020-06-02 20:46:21 UTC
Revision: a27f41e4ae5e8a41ab9b19f8dd6d86d7b384dad4
Kotlin: 1.3.72
Groovy: 2.5.11
Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM: 1.8.0_92 (Oracle Corporation 25.92-b14)
OS: Windows 10 10.0 amd64
Pt1.2 IDEA配置
Pt1.3 导入源码
(1) Idea中选择[File]-[New]-[Project from Existing Sources],将源码导入IDEA;
(2) 添加阿里云镜像仓库
默认使用的是spring的仓库,由于网络限制,建议再build.gradle中配置国内的阿里提供的镜像仓库下载,下载速度会快很多。
repositories {
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
maven { url "https://oss.jfrog.org/artifactory/oss-snapshot-local" }
maven {url 'https://maven.aliyun.com/nexus/content/groups/public/'} // 加上阿里云仓库
maven {url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'} // 加上阿里云仓库
}
(3) 修改依赖的gradle版本
gradle-wrapper.properties中描述了依赖的gradle版本,如果跟本地不一致,建议修改成一致的,防止出现意外的兼容性问题。
同时,如果本地安装的Gradle版本和Spring源码中依赖的版本相差太多,也建议本地升级到差不多的版本,防止出现意外的兼容性问题。
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
(4) 注释enterprise依赖
将io.spring.gradle-enterprise-conventions这个插件注释掉,否则编译阶段可能会报错。
这行代码可能在build.gradle文件中,也可能在settings.gradle文件中,我的是在settings.gradle中。
//id "io.spring.gradle-enterprise-conventions" version "0.0.2"
Pt2 构建源码
Pt2.1 Gradle Build
使用gradle进行编译,我这边大概花了2个小时才完成编译,要下载大量的jar,最后当你看到BUILD SUCCESSFUL的时候,恭喜你终于成功了。
> Task :buildSrc:compileJava UP-TO-DATE
> Task :buildSrc:compileGroovy NO-SOURCE
> Task :buildSrc:pluginDescriptors UP-TO-DATE
> Task :buildSrc:processResources UP-TO-DATE
> Task :buildSrc:classes UP-TO-DATE
> Task :buildSrc:jar UP-TO-DATE
> Task :buildSrc:generateSourceRoots UP-TO-DATE
> Task :buildSrc:assemble UP-TO-DATE
> Task :buildSrc:pluginUnderTestMetadata UP-TO-DATE
> Task :buildSrc:compileTestJava NO-SOURCE
> Task :buildSrc:compileTestGroovy NO-SOURCE
> Task :buildSrc:processTestResources NO-SOURCE
> Task :buildSrc:testClasses UP-TO-DATE
> Task :buildSrc:test SKIPPED
> Task :buildSrc:validatePlugins UP-TO-DATE
> Task :buildSrc:check SKIPPED
> Task :buildSrc:build UP-TO-DATE
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.5/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 44s
BUILD SUCCESSFUL in 374ms
Pt2.2 Idea Build Project
(1) 选择IDEA - [Build Project]
如果直接编译成功,恭喜你,绝对哪里不正常。
如果出现[Kotlin: warnings found and -Werror specified]这个错误,那说明你基本上快搞定了。
(2) 编译spring-core
-
打开IDEA右侧Gradle标签页,双击[spring-core]-[Tasks]-[other]-[cglibRepackJar],看到[BUILD SUCCESSFUL]才说明成功;
-
然后双击[spring-core]-[other]-[objenesisRepackJar],直到[BUILD SUCCESSFUL];
-
然后双击[spring-core]-[other]-[compileTestJava],直到[BUILD SUCCESSFUL];
-
最后双击[spring-core]-[build]-[build],直到[BUILD SUCCESSFUL];
(3) 编译spring-framework
双击[spring]-[Tasks]-[build]-[build]进行编译,看到Build成功。
13:24:56: Executing task 'build'...
> Task :buildSrc:compileJava UP-TO-DATE
> Task :buildSrc:compileGroovy NO-SOURCE
> Task :buildSrc:pluginDescriptors UP-TO-DATE
> Task :buildSrc:processResources UP-TO-DATE
> Task :buildSrc:classes UP-TO-DATE
> Task :buildSrc:jar UP-TO-DATE
> Task :buildSrc:assemble UP-TO-DATE
> Task :buildSrc:pluginUnderTestMetadata UP-TO-DATE
> Task :buildSrc:compileTestJava NO-SOURCE
> Task :buildSrc:compileTestGroovy NO-SOURCE
> Task :buildSrc:processTestResources NO-SOURCE
> Task :buildSrc:testClasses UP-TO-DATE
> Task :buildSrc:test NO-SOURCE
> Task :buildSrc:validatePlugins UP-TO-DATE
> Task :buildSrc:check UP-TO-DATE
> Task :buildSrc:build UP-TO-DATE
> Task :framework-bom:assemble UP-TO-DATE
> Task :integration-tests:compileJava NO-SOURCE
> Task :framework-bom:check UP-TO-DATE
> Task :framework-bom:build UP-TO-DATE
> Task :integration-tests:processResources NO-SOURCE
> Task :integration-tests:classes UP-TO-DATE
> Task :compileKotlin NO-SOURCE
> Task :spring-core:cglibRepackJar UP-TO-DATE
> Task :compileJava NO-SOURCE
> Task :compileGroovy NO-SOURCE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :inspectClassesForKotlinIC UP-TO-DATE
> Task :spring-core:objenesisRepackJar UP-TO-DATE
> Task :jar UP-TO-DATE
> Task :assemble UP-TO-DATE
> Task :checkstyleMain NO-SOURCE
> Task :integration-tests:jar UP-TO-DATE
> Task :integration-tests:assemble UP-TO-DATE
> Task :integration-tests:checkstyleMain NO-SOURCE
> Task :integration-tests:compileTestFixturesJava NO-SOURCE
> Task :spring-core:processResources UP-TO-DATE
> Task :spring-beans:processResources UP-TO-DATE
> Task :spring-aop:processResources UP-TO-DATE
> Task :spring-expression:processResources UP-TO-DATE
> Task :spring-jcl:compileJava UP-TO-DATE
> Task :spring-jcl:processResources UP-TO-DATE
> Task :spring-jcl:classes UP-TO-DATE
> Task :kotlin-coroutines:compileKotlin UP-TO-DATE
> Task :spring-jcl:jar UP-TO-DATE
> Task :kotlin-coroutines:compileJava NO-SOURCE
> Task :kotlin-coroutines:processResources NO-SOURCE
> Task :kotlin-coroutines:classes UP-TO-DATE
> Task :kotlin-coroutines:inspectClassesForKotlinIC UP-TO-DATE
> Task :kotlin-coroutines:jar UP-TO-DATE
> Task :spring-context:processResources UP-TO-DATE
> Task :spring-instrument:compileJava UP-TO-DATE
> Task :spring-instrument:processResources NO-SOURCE
> Task :spring-instrument:classes UP-TO-DATE
> Task :spring-tx:processResources UP-TO-DATE
> Task :spring-instrument:jar UP-TO-DATE
> Task :spring-oxm:processResources UP-TO-DATE
> Task :spring-jdbc:processResources UP-TO-DATE
> Task :spring-orm:processResources NO-SOURCE
> Task :spring-context-support:processResources UP-TO-DATE
> Task :spring-web:processResources UP-TO-DATE
> Task :spring-webmvc:processResources UP-TO-DATE
> Task :spring-messaging:processResources NO-SOURCE
> Task :spring-websocket:processResources UP-TO-DATE
> Task :spring-webflux:processResources UP-TO-DATE
> Task :spring-test:processResources UP-TO-DATE
> Task :spring-aop:processTestFixturesResources NO-SOURCE
> Task :spring-beans:processTestFixturesResources NO-SOURCE
> Task :spring-tx:processTestFixturesResources NO-SOURCE
> Task :kotlin-coroutines:assemble UP-TO-DATE
> Task :integration-tests:processTestResources UP-TO-DATE
> Task :integration-tests:processTestFixturesResources NO-SOURCE
> Task :integration-tests:testFixturesClasses UP-TO-DATE
> Task :integration-tests:checkstyleTestFixtures NO-SOURCE
> Task :kotlin-coroutines:checkstyleMain NO-SOURCE
> Task :kotlin-coroutines:compileTestFixturesKotlin NO-SOURCE
> Task :kotlin-coroutines:compileTestFixturesJava NO-SOURCE
> Task :kotlin-coroutines:compileTestKotlin NO-SOURCE
> Task :integration-tests:testFixturesJar UP-TO-DATE
> Task :kotlin-coroutines:compileTestJava NO-SOURCE
> Task :kotlin-coroutines:processTestResources NO-SOURCE
> Task :kotlin-coroutines:testClasses UP-TO-DATE
> Task :kotlin-coroutines:checkstyleTest NO-SOURCE
> Task :kotlin-coroutines:processTestFixturesResources NO-SOURCE
> Task :kotlin-coroutines:testFixturesClasses UP-TO-DATE
> Task :spring-aop:processTestResources UP-TO-DATE
> Task :spring-aop:processJmhResources NO-SOURCE
> Task :kotlin-coroutines:checkstyleTestFixtures NO-SOURCE
> Task :spring-aspects:processResources UP-TO-DATE
> Task :kotlin-coroutines:testFixturesJar UP-TO-DATE
> Task :spring-aspects:processTestResources UP-TO-DATE
> Task :spring-aspects:processJmhResources NO-SOURCE
> Task :spring-aspects:processTestFixturesResources NO-SOURCE
> Task :spring-context:processTestFixturesResources NO-SOURCE
> Task :spring-context-support:processTestFixturesResources NO-SOURCE
> Task :spring-beans:processTestResources UP-TO-DATE
> Task :spring-beans:processJmhResources UP-TO-DATE
> Task :spring-core:compileKotlin UP-TO-DATE
> Task :kotlin-coroutines:test NO-SOURCE
> Task :kotlin-coroutines:check UP-TO-DATE
> Task :kotlin-coroutines:build UP-TO-DATE
> Task :spring-context-indexer:compileJava UP-TO-DATE
> Task :spring-context:processTestResources UP-TO-DATE
> Task :spring-context:processJmhResources NO-SOURCE
> Task :spring-core:compileJava UP-TO-DATE
> Task :spring-core:classes UP-TO-DATE
> Task :spring-context-support:processTestResources UP-TO-DATE
> Task :spring-context-support:processJmhResources NO-SOURCE
> Task :spring-core:inspectClassesForKotlinIC UP-TO-DATE
> Task :spring-expression:processTestResources UP-TO-DATE
> Task :spring-expression:processJmhResources NO-SOURCE
> Task :spring-expression:processTestFixturesResources NO-SOURCE
> Task :spring-instrument:assemble UP-TO-DATE
> Task :spring-instrument:compileTestFixturesJava NO-SOURCE
> Task :spring-instrument:compileTestJava NO-SOURCE
> Task :spring-core:jar UP-TO-DATE
> Task :spring-instrument:processTestResources NO-SOURCE
> Task :spring-core:compileTestFixturesKotlin UP-TO-DATE
> Task :spring-core:compileTestFixturesJava UP-TO-DATE
> Task :spring-expression:compileKotlin UP-TO-DATE
> Task :spring-expression:compileJava UP-TO-DATE
> Task :spring-expression:classes UP-TO-DATE
> Task :spring-expression:inspectClassesForKotlinIC UP-TO-DATE
> Task :spring-expression:jar UP-TO-DATE
> Task :spring-core:processTestFixturesResources NO-SOURCE
> Task :spring-core:testFixturesClasses UP-TO-DATE
> Task :spring-core:testFixturesJar UP-TO-DATE
> Task :spring-core:assemble UP-TO-DATE
> Task :spring-core:compileTestKotlin UP-TO-DATE
> Task :spring-core:compileTestJava UP-TO-DATE
> Task :spring-core:p