Spring源码环境构建

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);
	}
}

最终成功如下图控制台输出!!

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值