spring源码构建

版本

spring : spring-framework-5.2.12.RELEASE

gradle: gradle-5.6.4-bin.zip

这个gradle版本是通过源码确定的, 源码下载解压, 源码->gradle->wrapper目录下, gradle-wrapper.properties中:

distributionUrl=gradle-5.6.4-bin.zip(这个值是修改后的值), 通过这个值下载gradle, 将压缩包放到wrapper下一份

gradle下载地址: https://services.gradle.org/distributions/

安装gradle

上面介绍的是获取gradle的版本, 同时放一份到源码目录->gradle->wrapper目录下并修改配置文件, 是为了编译时不去下载。下面是安装gradle。

将gradle解压到制定位置, 我的是: D:\gradle 目录,这个也就是我的gradle安装目录。

安装目录下命令行创建一个本地仓库: mkdir .gradle

配置环境变量
  1. 新建变量: GRADLE_HOME, 为gradle的安装目录, 即: D:\gradle\gradle-5.6.4-bin\gradle-5.6.4
  2. 新建变量: GRADLE_USER_HOME, 为本地仓库目录, 上面建的, 即: D:\gradle.gradle
  3. 在Path中,添加:%GRADLE_HOME%\bin
配置gradle默认镜像

在gradle仓库中(.gradle目录下),新建一个init.gradle文件,其中写入:

allprojects{
    repositories {
        mavenLocal()
        maven { url "https://maven.aliyun.com/nexus/content/groups/public/"}
        def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/'
        def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter/'
        def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/'
        def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                    remove repo
                }
                if (url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
                    remove repo
                }
                if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
                    remove repo
                }
                if (url.startsWith('https://plugins.gradle.org/m2/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
                    remove repo
                }
            }
        }
        maven { url ALIYUN_REPOSITORY_URL }
        maven { url ALIYUN_JCENTER_URL }
        maven { url ALIYUN_GOOGLE_URL }
        maven { url ALIYUN_GRADLE_PLUGIN_URL }
    }
}
验证

​ 打开命令行, 输入 gradle -v, 出现版本信息, 说明安装成功。

预编译spring

进入到源码目录下:

1、打开build.gradle文件
// 根据实际情况注释掉plugins下的这个, 否则会报错, 网上看别人的没报错...
//id 'io.spring.gradle-enterprise-conventions' version '0.0.2'

// 找到repositories, 修改仓库地址
repositories {
	maven { url 'https://maven.aliyun.com/repository/spring-plugin' }
}
2、打开settings.gradle文件
// 修改仓库
pluginManagement {
	repositories {
		gradlePluginPortal()
		maven { url 'https://maven.aliyun.com/repository/spring-plugin' }
	}
}

// 注释掉spring-aspects
//include "spring-aspects"
3、执行预编译

源码目录下, 命令行执行下面命令, 可能会报错, 慢慢试吧, 我也试出来的, 出现BUILD SUCCESSFUL 字样说明编译成功。

gradlew.bat :spring-oxm:compileTestJava

导入idea

1、导入

然后选择源码目录下的build.gradle文件即可。

2、修改idea中gradle配置

注意第2点那里要这杨设置, 否则后面运行测试程序会提示: No tasks available

3、configure build

漫长的等待, 第一次报错了, 没有成功, 但是好像没啥影响

4、开始构建

漫长的等待, 最后出现下面字样, 构建成功。

CONFIGURE SUCCESSFUL in 8m 44s

测试程序

file->module->选gradle、java, ArtifactId和groupId自己写, 结构如下:

新建module中build.gradle中添加依赖:

dependencies {
//    testCompile group: 'junit', name: 'junit', version: '4.12'
    implementation 'junit:junit:4.12'
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile(project(":spring-context"))
    compile(project(":spring-beans"))
    compile(project(":spring-instrument"))
    compile(project(":spring-core"))
    compile 'junit:junit:4.12'
    compile group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3'
}

TestApp: (TestBean类就不写了, 自己随便写个就行)

package com.zlc;

import com.zlc.bean.TestBean;
import org.junit.Test;
import org.springframework.context.annotation.*;
public class TestApp {
	@Test
	public void MyTest() {
 		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.zlc.bean");
		TestBean bean = context.getBeanFactory().getBean(TestBean.class, false);
		System.out.println(bean.getName());
	}
}

此时运行Test方法时, 如果gradle中没有2步中第2点配置会提示: No tasks available

配置好后可以运行, 但是依然报错:

这个错误的解决办法是在spring-core -> kotlin-coroutines -> src -> main -> kotlin -> org.framework.core -> CoroutinesUtils.kt 上右键并点击Build Module 'spring-kotlin-coroutines.main'

完美运行, 收官!

参考

https://blog.csdn.net/m_q_l_/article/details/111187545

https://blog.csdn.net/guyexiangyun/article/details/106527732

https://www.it610.com/article/1295306604677242880.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值