版本选择
- JDK11
- gradle 6.4.1
- Spring-framework 5.3.0
- Intellij IDEA 2021.1
下载地址
JDK:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
gradle:https://gradle.org/releases/
Spring-framework:https://github.com/spring-projects/spring-framework/tree/v5.3.0
开始构建
下载 spring-framework 源码
解压 spring-framework 压缩包
这是解压之后的压缩包,当前只需要关注这四个文件
- build.gradle:类似于 maven 的 pom.xml
- settings.gradle:用于指示Gradle在构建应用时应将哪些模块包含在内;
- gradle.properties:主要是gradle 的一些属性配置,例如后台进程内存大小;
- import-into-idea.md:官方提供的spring源码导入idea的步骤和注意说明
修改配置
- 修改 settings.gradle 文件,添加上阿里云的 maven 仓库
maven { url "https://maven.aliyun.com/repository/public" }
注意:编译的时候这里可能会报错id "io.spring.gradle-enterprise-conventions" version "0.0.2"
,可以先注释掉
- 修改gradle.properties文件(这里可以不用改,也可以编译成功)
version=5.3.0
## 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出
org.gradle.jvmargs=-Xmx2048M
## 开启 Gradle 缓存
org.gradle.caching=true
## 开启并行编译
org.gradle.parallel=true
## 启用新的孵化模式
org.gradle.configureondemand=true
## 开启守护进程 通过开启守护进程,下一次构建的时候,将会连接这个守护进程进行构建,而不是重新fork一个gradle构建进程
org.gradle.daemon=true
kotlin.stdlib.default.dependency=false
- 修改build.gradle文件,加上使用阿里云仓库
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
- 在
spring-framework-5.3.0
目录下执行预编译
./gradlew :spring-oxm:compileTestJava
提示成功之后就可以导入 idea 了
将源码导入 idea
选择spring-framework,点击 open,idea 会自动 build,这时候就可以在 idea 中配置我们本地环境的 gradle
配置 gradle,选择IntelliJ IDEA-->Preferences-->build-->gradle
提示这个就表示构建成功了
验证
在 spring-framework 项目下创建一个自己的项目
## 修改 build.gradle文件
compile(project(":spring-context"))
编写测试类,运行,如下图所示
package com.nimo.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.nimo")
public class HelloConfig {
}
package com.nimo.dao;
import org.springframework.stereotype.Repository;
@Repository
public class HelloSpring {
public void hello(){
System.out.println("---------------------------------");
System.out.println("Hello spring-framework");
System.out.println("---------------------------------");
}
}
补充
参考资料:https://www.cnblogs.com/mazhichu/p/13163979.html
如果编译时有报错,大多数情况都和软件版本有关