首页 > 编程语言 >编译spring5.2.x源码

编译spring5.2.x源码

时间:2023-11-10 14:25:37浏览次数:32  
标签:name spring gradle 编译 源码 https spring5.2 public

编译spring源码是学习spring的第一步,spring源码是用gradle编译的,在编译时会遇到一些问题,在此记录一下。

下载spring源码

第一步需要下载spring的源码,由于官方托管在github,国内访问github不通畅,这里就直接使用gitee的镜像仓库,在国内比较快,地址:https://gitee.com/mirrors/spring-framework

我们可以直接fork出一份到自己的仓库中,然后克隆到自己本地。
这里我使用5.2.x分支作为源码阅读分支。

下载gradle并安装

gradle使用5.6.4版本。安装方式参考百度,和maven基本一致。
gradle在国内访问比较慢,我放到百度云盘上了。

链接:https://pan.baidu.com/s/1_vVFJBep1p6nM8EilG-RYg
提取码:zfh1

修改Spring源码包下的gradle相关配置文件

修改gradle/wrapper/gradle-wrapper.properties 文件

该文件distributionUrl值默认是从官网上下载gradle,我们下载过了,这里直接配置成本地地址

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
#distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
distributionUrl=file:///F:/soft/gradle-5.6.4-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

修改根目录下build.gradle

中央仓库配置为阿里云的,下载依赖更快

repositories {
	maven { url "https://maven.aliyun.com/nexus/content/groups/public" }
	maven { url "https://maven.aliyun.com/nexus/content/repositories/jcenter" }
	mavenCentral()
	maven { url "https://repo.spring.io/libs-spring-framework-build" }
}

修改buildSrc/build.gradle配置

同样配置阿里云中央仓库

repositories {
	maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'}
	maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
	mavenCentral()
	gradlePluginPortal()
}

使用Gradle编译Spring环境

执行gradlew.bat

image.png

执行gradlew :spring-oxm:compileTestJava

image.png

执行gradlew :spring-core:compileTestJava

image.png

F:\dev\my\spring-framework>gradle.bat
Starting a Gradle Daemon (subsequent builds will be faster)

> Task :help

Welcome to Gradle 5.6.4.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

To see more detail about a task, run gradle help --task <task>

For troubleshooting, visit https://help.gradle.org

BUILD SUCCESSFUL in 41s
1 actionable task: 1 executed
F:\dev\my\spring-framework>gradlew :spring-oxm:compileTestJava
Downloading file:/F:/soft/gradle-5.6.4-all.zip
........................................................................................................................
> Task :spring-oxm:genJaxb
[ant:javac] : warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

BUILD SUCCESSFUL in 47s
40 actionable tasks: 24 executed, 16 from cache
F:\dev\my\spring-framework>gradlew :spring-core:compileTestJava

BUILD SUCCESSFUL in 6s
17 actionable tasks: 2 from cache, 15 up-to-date

idea配置

上面执行完之后,可以把源码导入idea中,我们需要在idea中配置下gradle

image.png

配置完之后,将整个项目进行编译
image.png

创建测试模块,测试可用性

创建一个新的模块mytest,如下所示:
image.png

build.gradle文件更改,加入spring模块依赖:

dependencies {
    testImplementation(platform("org.junit:junit-bom:5.9.1"))
    testImplementation("org.junit.jupiter:junit-jupiter")
    compile(project(":spring-beans"))
    compile(project(":spring-core"))
    compile(project(":spring-context"))
    compile(project(":spring-aop"))
}

新建配置文件:spring-config.xml

<?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 id="myTestBean" class="org.springframework.test.TestBean"/>

</beans>

创建java类:TestBean

package org.springframework.test;

import org.springframework.stereotype.Component;

@Component
public class TestBean {
	private String name = "me";

	public TestBean(String name) {
		this.name = name;
	}

	public TestBean() {
	}

	@Override
	public String toString() {
		return "MyTestBean{" +
				"name='" + name + '\'' +
				'}';
	}

	public String getName() {
		return name;
	}

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

执行测试:

package org.springframework.test;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) {
		System.out.println("Hello world!");

		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("org.springframework.test");
		TestBean bean = context.getBean(TestBean.class);
		System.out.println("anno - " + bean);


		ClassPathXmlApplicationContext context1 = new ClassPathXmlApplicationContext("classpath:spring-config.xml");
		Object myTestBean = context1.getBean("myTestBean");
		System.out.println("xml - " + myTestBean);
	}
}

可能遇到问题:

  1. Plugin with id 'java-test-fixtures' not found.

使用gradle固定版本

参考:

  1. 在windows10使用Gradle编译Spring源码
    https://blog.csdn.net/qq_34738512/article/details/129747004
  2. 【极速下载】gradle各版本快速下载地址大全
    https://blog.csdn.net/ii950606/article/details/109105402

标签:name,spring,gradle,编译,源码,https,spring5.2,public
From: https://www.cnblogs.com/mingshan/p/17824001.html

相关文章

  • 直播app系统源码,图片Loading旋转动画效果
    直播app系统源码,图片Loading旋转动画效果anim文件下的动画xml: <?xmlversion="1.0"encoding="utf-8"?><rotatexmlns:android="http://schemas.android.com/apk/res/android"  android:fromDegrees="0"//旋转的起始角度  android:toDegrees=&......
  • 视频直播系统源码,EditText输入框的使用
    视频直播系统源码,EditText输入框的使用为了良好的交互和用户体验,我们在做功能时需要对输入框又一些状态上的监听才能更好的把一些信息反馈给用户。比如登录时的,错误提示,选中时的颜色改变等等,常用的一些方法如下: 1.内容编辑的监听:当我们需要实时对内容进行监听:比如内容为空/格......
  • 基于SSM+SpringBoot影院在线预订系统开发与设计(附源码资料)
    文章目录1.项目简介2.项目运行截图2.1.电影网站首页2.2.电影列表2.3.反馈与意见2.4.电影详情2.5.电影预订2.6.会员登录2.7.会员注册2.8.管理员后台首页2.9.用户管理2.10.电影管理2.11.房间管理2.12.房间管理2.13.黑名单管理2.14.用户反馈管理2.15.预约管理3.源码获取1.项目简介该......
  • go-epoll源码解析.md
    golang-epoll模型源码解析epollepollisaniomultipexingmodelinlinuxenv.epollgenerateepolltable.Anewsocketwillbeputintoepolltableafterbindandlistenoperation.ThenwewillgetreadyeventswithwaitfuncWhenepoll_wait()returnsready......
  • go源码解析-map
    map简介golang的map主要是基于hash-bucket实现demoMap:=make(int,len)typehmapstruct{ //Note:theformatofthehmapisalsoencodedincmd/compile/internal/reflectdata/reflect.go. //Makesurethisstaysinsyncwiththecompiler'sdefinition. count......
  • 基于Hadoop的物品租赁系统的设计与实现-计算机毕业设计源码+LW文档
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器数据库:DROPTABLEIFEXISTSaboutus;/*!40101SET@saved_cs_client=@@character_set_cl......
  • 编译Fastdfs报错——In file included from ../common/fdfs_global.c:21:0: ../common
    记录一下安装fastdfs时编译报错,报错信息如下:原因:这是因为我们在安装较新版得fastdfs时,从github下载得安装包缺少文件,如果按照网上很多博主较早之前写的文档操作得话就会出现这样得错误,缺少了libserverframe网络框架解决方法:安装 libserverframe网络框架安装包下载地......
  • springboot社区团购管理系统的设计与实现-计算机毕业设计源码+LW文档
    abo开发说明开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器部分数据库:----Tablestructurefortableaddress--DROPTABLEIFEXISTSaddr......
  • 基于Spark的共享单车数据存储系统的设计与实现-计算机毕业设计源码+LW文档
    摘 要近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,共享单车数据存储系统利用计算机网络实现信息化管理,使整个共享单车数据存储管理的发展和服务水平有显著提升。本文拟采用java技术和Springboot搭建系统框架,后台使用MySQL数据库进......
  • springboot科研管理系统-计算机毕业设计源码+LW文档
    摘 要随着计算机技术发展,计算机系统的应用已延伸到社会的各个领域,大量基于网络的广泛应用给生活带来了十分的便利。所以把科研管理与现在网络相结合,利用计算机搭建科研管理系统,实现科研的信息化。则对于进一步提高科研管理发展,丰富科研管理经验能起到不少的促进作用。系统阐述......