首页 > 编程语言 >使用Gradle编译Spring源码

使用Gradle编译Spring源码

时间:2022-11-20 13:35:57浏览次数:64  
标签:name spring gradle Person 源码 Spring Gradle public

最近想研究下spring的源码,决定先把源码跑起来,在此记录一下本次遇到的问题。

本次使用的工具有:git、IDEA2021社区版、jdk17、gradle7.5.1

Build from Source得知,需要git和jdk17。然后把java环境变量配置好。

首先获取源码,git clone [email protected]:spring-projects/spring-framework.git,然后打开源码中的import-into-idea.md,会看到

Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava
Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)
When prompted exclude the spring-aspects module (or after the import via File-> Project Structure -> Modules)
Code away

那就按照官方说的做咯,然后运行./gradlew :spring-oxm:compileTestJava,我发现他一上来先下载gradle,后面就一直卡在3%不动了。于是自己装了个gradle(方式如下),

1.下载gradle:https://downloads.gradle-dn.com/distributions/gradle-7.5.1-bin.zip
2.配置环境变量,变量名:GRADLE_HOME Gradle的解压目录,然后在Path中添加,%GRADLE_HOME%\bin
3.配置仓库地址,环境变量中新增,GRADLE_USER_HOME 自定义Gradle仓库目录

然后把spring源码中的build.gradle和settings.gradle中加入阿里云镜像。

maven {url 'https://maven.aliyun.com/repository/public/'}

这么一通下来,我发现运行./gradlew :spring-oxm:compileTestJava,还是会下载gradle,于是把项目中gradle/wrapper/gradle-wrapper.properties中的distributionUrl注释掉,

不用spring提供的命令,而是使用gradle :spring-oxm:compileTestJava ,这下终于BUILD SUCCESSFUL。

然后把项目导入到idea,并配置Gradle

排除spring-aspects模块

然后等待gradle build完成。

新建一个模块spring-demo,测试下是否成功,卡在这里很久,新建的项目包也引进来了,始终在代码里无法导入依赖,最后发现我建的模块和spring模块中的结构不一致,删了重建后就好了,测试代码如下:

//spring-demo.gradle

plugins {
    id 'java'
}

group 'org.springframework'
version '6.0.1-SNAPSHOT'



dependencies {
    api(project(":spring-context"))
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

test {
    useJUnitPlatform()
}

测试代码如下:

//JavaConfig.class

@Configuration
public class JavaConfig {
    @Bean
    public Person person(){
        Person p= new Person();
        p.setName("yyb");
        return p;
    }
}
//Person.class

public class Person {
	private String name;

	public Person(){
		System.out.println("2、开始实例化 person ");
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}
//Test.class

ApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
Person person = (Person) context.getBean("person");
System.out.println("13、实例化完成,此时可获取属性的值:Person name = " + person.getName());

测试结果:

经过一番努力,终于成功了。感谢以下博主的无私分享,不然我也不会这么轻易就成功:
一步步教你使用Gradle编译Spring源码
as4配置本地gradle_gradle+IDEA构建spring源码阅读环境

标签:name,spring,gradle,Person,源码,Spring,Gradle,public
From: https://www.cnblogs.com/ginb/p/16907354.html

相关文章

  • 【Logback+Spring-Aop】实现全面生态化的全链路日志追踪系统服务插件「Logback-MDC篇
    日志追踪日志追踪对于功能问题的排查和数据流转的路径分析时非常重要的,有了全链路日志追踪体系机制可以非常有效且快速的定位问题,但在多线程环境中,若没有相关成熟的框架的......
  • SpringMVC - 初识Springmvc
    一、SpringMVC案例在springmvc配置文件中配置扫描器<!--base-package:表示扫描路径--!><context:component-scanbase-package="com.xin"></context:component-scan>创......
  • Seata 1.5.2 源码学习(Client端)
    在上一篇中通过阅读Seata服务端的代码,我们了解到TC是如何处理来自客户端的请求的,今天这一篇一起来了解一下客户端是如何处理TC发过来的请求的。要想搞清楚这一点,还得从Globa......
  • mybatis-plus与springboot整合
    一、mybatis开发问题需要自己写实体需要自己写xml文件和对应的xml中的sql那是不是存在一种对于通用的功能做很好支持的插件功能:mybatis-plus二、解决的问题:代码生......
  • springboot 启动脚本
    springboot项目打包有是一个jar包,需要启动,如下命令启动命令:nohupjava-jarapp.jar>./log.out2>&1&但使用脚本会更加方便,脚本如下:#!/bin/bash#这里可替换为你自己......
  • SpringMVC - 环境搭建
    一、MVC介绍M(model): 数据层。有两种数据,第一种java实体类,第二种daoV(view):视图层。HTML,jsp页面等。C(Controller):控制层。二、SpringMVC的环境搭建1.创建maven......
  • springboot整合redis详解
    springboot整合redis1.首先创建springboot工程2.配置pom.xml文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns......
  • springmvc九yxf学RequestParam
    源码可以看出RequestParam是用在参数上的,再看,这个注解的源码比较少。required,这是设置是否必须有这个参数。defaultValue,是可以省略的意思,就是这个参数......
  • SpringCloud笔记(1)Eureka
     整体架构图:  1.服务注册与发现  RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以......
  • chrome浏览器 开发者工具F12中某网站的sources下的源码如何批量保存
    1.常用保存Sources源码的两种方法1.1单个文件直接右键另存为1.2单个页面保存网页,就会把引用到的所有文件下载下来如果页面很多,文件也很多,静态资源也很多,那么得一个一个去......