1、下载gradle
https://gradle.org/releases/
2、配置环境变量
GRADLE_HOME、PATH、GRADLE_USER_HOME【可以指向安装目录自己创建的.gradle文件夹】
PATH = %GRADLE_USER_HOME%\bin
maven本地仓库 --> 所有的jar包
open -e .bash_profile
GRADLE_HOME=/Users/oile/Desktop/soft/gradle-8.5
export GRADLE_HOME
export PATH=$PATH:$GRADLE_HOME/bin
source ~/.bash_profile
gradle -version
GRADLE_USER_HOME=/Users/oile/Desktop/soft/gradle-8.5/gradle
3、配置下载加速
Gradle 还是从 maven 仓库下载的。
给gradle安装目录下init.d文件夹,放一个init.gradle文件,内容如下:
init.gradle文件内容如下:
gradle.projectsLoaded {
rootProject.allprojects {
buildscript {
repositories {
def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
def NEXUS_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://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
println("buildscript ${repo.url} replaced by $JCENTER_URL.")
remove repo
}
else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
remove repo
}
else if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
remove repo
}
}
}
jcenter {
url JCENTER_URL
}
google {
url GOOGLE_URL
}
maven {
url NEXUS_URL
}
}
}
repositories {
def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
def NEXUS_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://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
println("buildscript ${repo.url} replaced by $JCENTER_URL.")
remove repo
}
else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
remove repo
}
else if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
remove repo
}
}
}
jcenter {
url JCENTER_URL
}
google {
url GOOGLE_URL
}
maven {
url NEXUS_URL
}
}
}
}
4、配置idea整合
service 目录,是代表gradle自己下载jar包的位置,类似以前maven的本地仓库
前置:提前解决可能会在构建spring源码出现的一个问题
很多人构建完spring的源码,并测试运行后,会报一个git的错误。
解决方案:
在idea里面设置默认的git地址,不要写自己的git地址(这一步可能需要做git的环境变量,也有可能不配置环境变量新版的idea会自动识别。)我是自己设置了git的环境变量就解决了报git的问题。
具体设置git环境变量如下:
找到自己电脑目录下的git,在path里面设置这三个git的环境变量,设置好环境变量以后,然后记得把idea设置好的git地址,设置成默认的,然后重启idea。应该就能显示默认的地址了
git目录:
5、下载Spring源码
Spring在github上的仓库地址是:GitHub - spring-projects/spring-framework: Spring Framework
1、同步Spring在github上的仓库地址源码
3、然后利用git Bach来进行下载
4、下载下来以后,导入到idea里面
5、点ok即可:
6、然后项目就开始进入引导过程:
7、然后就开始构建Spring源码了,进来项目以后,点Cancel,先别让他加载,先进来设置jdk15
8、然后点右侧giadle进行项目的刷新,开始重新加载工程
9、如无意外,构建Spring源码完成:
10、创建新工程进行测试源码环境
创建一个子工程名为:springsource-test,然后创建一个MainTest类进行测试
11、引入相关依赖
随便找个spring的工程,比如找这个spring-websocket工程里面的spring-websocket.gradle这个配置,在这个spring-websocket.gradle里面找dependencies下面的compile(如下图所示)
compile(project(":spring-context"))
解释
compile: 就是跟maven的scope=compile一样
project:就是引当前项目下的什么模块依赖。
比如就测试spring的ioc容器,就把compile(project(":spring-context"))这个复制到springsource-test工程下面的build.gradle的里面dependencies下面添加进去(如下图所示)
compile(project(":spring-context"))
//新版引包
implementation(project(":spring-context:"))
然后重新刷新一下springsource-test这个工程
12、引入相关依赖,创建一个IOC容器
一旦快捷键有提示,就说明引入成功了
然后创建一个Spring的xml配置文件:beans.xml
然后写一个组件:Person类
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
'}';
}
}
然后在bean.xml里面创建一个person并赋值:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="com.hhf.bean.Person" id="person">
<property name="name" value="zhangsan"></property>
</bean>
</beans>
然后在测试类MainTest中进行测试
import com.hhf.bean.Person;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Person bean = context.getBean(Person.class);
System.out.println(bean);
}
}
最终成功如下图控制台输出!!