spring 5.3.x 、6.1.x、6.0.x 源码本地编译运行

news2024/9/21 3:32:59

参考大佬文章,完美完成本地idea spring源码编译和demo测试

参考链接(spring5.3.x)

spring5.3.x源码阅读环境搭建  

下面是spring6.0.x参考

spring6.0.x jdk调成17

idea 2022.2.4版本本地编译spring源码项目

spring6.0.x  分支

gradle-8.2  版本

jdk17 版本

 File > Project Structure > Project Settings > Project

File > Project Structure > Project Settings > Modules

 File > Project Structure > Platform Settings > SDKs

 File > Settings > Build, Execution, Deployment > Compiler > Java Compiler

Project bytecode version: 17

 File > Settings > Build, Execution, Deployment > Build Tools > Gradle

 如果遇到下面的错

Could not resolve all dependencies for configuration ':spring-webflux:jmhCompileClasspath'.
Failed to calculate the value of task ':spring-core:compileJava21Java' property 'javaCompiler'.
No matching toolchains found for requested specification: {languageVersion=21, vendor=any, implementation=vendor-specific} for WINDOWS on x86_64.
No locally installed toolchains match and toolchain download repositories have not been configured.

参看文章    spring源码编译bug

 文章解决方案如下

解决方案

找到项目中 spring-core文件夹中的spring-core.gradle文件中下面这行代码将21去掉即可!!!
修改前

multiRelease {
	targetVersions 17 , 21
}

修改后

multiRelease {
	targetVersions 17
}

在这里插入图片描述

成功!!

在这里插入图片描述

最终编译成功,下面问题可以忽略

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

执行 spring-oxm 模块

 执行 spring-core 模块

如何想看spring-web模板代码,如何直接点击某一个类报错,可以

先执行 spring-web 模块,如下图,双击compileTestJava,完成编译

出现下面结果,不会报错类应该不会报错了。

至此,完成代码编译。

可以新建一个模块,写测试代码,调用spring相关的类。

spring 6.0.x 选择 JDK17

spring 5.3.x选择JDK11

下面是以5.3.x代码为例(JDK11)

点击Create,

会生成build.gradle文件,可以填写以下依赖

plugins {
    id 'java'
}

group 'org.springframework'
version '5.3.29'

repositories {
    mavenCentral()
}

dependencies {
    api(project(":spring-beans"))
    api(project(":spring-core"))
    api(project(":spring-aop"))
    api(project(":spring-context"))
    api(project(":spring-expression"))
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

test {
    useJUnitPlatform()
}

等结束后,新建包和类如下参考

参考目录

JavaConfiguration.java类如下
package org.springframework.learning;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JavaConfiguration {

	@Bean
	public User user() {
		User user = new User();
		user.setAge(11);
		user.setUsername("mike uli");
		return user;
	}
}

User.java

package org.springframework.learning;

public class User {

	private String username;
	private Integer age;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "User{" +
				"username='" + username + '\'' +
				", age=" + age +
				'}';
	}
}

TestMain.java
package org.springframework.learning;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestMain {
	public static void main(String[] args) {
		ApplicationContext context = new AnnotationConfigApplicationContext(JavaConfiguration.class);
		User user = context.getBean("user", User.class);
		System.out.println(user);
	}
}

点击执行代码,完成

输出以下结果,说明没问题了,可以bebug看代码了。

可能遇到的问题列表

  • Gradle build 报错:Received status code 400 from server: Bad Request

Gradle不知道在什么时候被配置了一个错误的代理!Gradle的代理配置路径是:

C:\Users\***\.gradle\gradle.properties

## For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Tue May 15 12:14:36 CST 2018
systemProp.https.proxyPort=80
systemProp.http.proxyHost=mirrors.neusoft.edu.cn
systemProp.https.proxyHost=mirrors.neusoft.edu.cn 
systemProp.http.proxyPort=80
  • Could not resolve all artifacts for configuration:app:classpath等系列问题解决方法

1.添加了阿里的maven。 2.然后在gradle\wrapper\gradle-wrapper.properties里把distributionUrl换成你本地的。

maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }


maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven { url'https://maven.aliyun.com/repository/public/' }
maven { url'https://maven.aliyun.com/repository/google/' }
maven { url'https://maven.aliyun.com/repository/jcenter/' }
maven { url'https://maven.aliyun.com/repository/central/' }

  • 解决Gradle sync failed: Gradle Sync Issues问题(Android开发)

安卓开发:解决Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration等问题

  • Could not resolve all artifacts for configuration ':classpath'.

4、(最重要的步骤)如果再次报错,请不厌其烦的且厚不要脸的多次点击这个小象(即重复第二步操作),正常情况下奇迹会发生的。(反正我是见证该奇迹了)

  • Unable to get mutable Windows environment variable map Gradlew Error

stack overflow  降低jdk版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1935882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序-4(自定义组件:数据、属性、数据监听器、生命周期函数、插槽、父子通信、behaviors)

目录 1.组件的创建和引用 局部引用组件 全局引用组件 组件和页面的区别 组件样式隔离 ​编辑 组件样式隔离的注意点 修改组件的样式隔离选项 data数据 methods方法 properties属性 data和properties属性的区别 使用setData修改properties的值 2.数据监听器 什么…

stm32入门-----EXTI外部中断(下——实践篇)

目录 前言 一、硬件介绍 1.对射红外线传感器 2.旋转编码器 二、EXTI外部中断C编程 1.开启RCC时钟 2.配置GPIOK口初始化 3.配置AFIO 4.配置EXIT 5.配置NVIC 三、EXIT外部中断项目实操 1.对射红外传感器计数 2.选择编码器计数 前言 本期接着上一期的内容继续学习stm3…

AutoMQ 生态集成 Redpanda Console

通过 Kafka Web UI 更加便利地管理 Kafka/AutoMQ 集群 随着大数据技术的飞速发展,Kafka 作为一种高吞吐量、低延迟的分布式消息系统,已经成为企业实时数据处理的核心组件。然而,Kafka 集群的管理和监控却并非易事。传统的命令行工具和脚本虽…

Java流的概念及API

流的概念 流(Stream)的概念代表的是程序中数据的流通,数据流是一串连续不断的数据的集合。在Java程序中,对于数据的输入/输出操作是以流(Stream)的方式进行的。可以把流分为输入流和输出流两种。程序从输入流读取数据,向输出流写入…

Python项目打包与依赖管理指南

在Python开发中,python文件需要在安装有python解释器的计算机的电脑上才能运行,但是在工作时,我们需要给客户介绍演示项目功能时并不一定可以条件安装解释器,而且这样做非常不方便。这时候我们可以打包项目,用于给客户…

《驾驭AI浪潮:伦理挑战与应对策略》

AI发展下的伦理挑战,应当如何应对? 人工智能飞速发展的同时,也逐渐暴露出侵犯数据隐私、制造“信息茧房”等种种伦理风险。随着AI技术在社会各个领域的广泛应用,关于AI伦理和隐私保护问题日趋凸显。尽管国外已出台系列法规来规范…

达梦数据库DM8-索引篇

目录 一、前景二、名词三、语法1、命令方式创建索引1.1 创建索引空间1.2.1 创建普通索引并指定索引数据空间1.2.2 另一种没验证,官方写法1.3 复合索引1.4 唯一索引1.5 位图索引1.6 函数索引 2、创建表时候创建索引3、可视化方式创建索引3.1 打开DM管理工具3.2 找到要…

nginx负载均衡实例

实现效果 浏览器输入地址http://nginx服务器ip(:80)/edu/a.html,实现负债均衡效果,平均分配到 服务器ip:8080和 服务器ip:8081进程中。 准备工作 准备两个tomcat,一个监听在8080端口,一个监听在8081端口。也可以准备多个tomcat。…

如何在电脑上演示手机上APP,远程排查移动端app问题

0序: 对接客户,给领导演示移动端产品,或者远程帮用户排查移动端产品的问题。都需要让别人能够看到自己在操作手机。 会议室可以使用投屏,但需要切换电脑和手机。 排查问题经常都是截图、或者手机上录制视频,十分繁琐…

node-red学习

Node-RED : 起步 1、安装nodejs Node.js — 在任何地方运行 JavaScript 验证 2、更换下载源 // 查看当前下载地址 npm config get registry // 设置淘宝镜像的地址 npm config set registry https://registry.npmmirror.com/ // 查看当前的下载地址 npm config get registry…

抖音矩阵系统源码开发部署流程分享

#短视频矩阵源码 #短视频矩阵 #源码交付 抖音矩阵系统源码开发部署流程如下: 环境配置:首先,需要安装并配置开发环境,包括安装Java JDK、MySQL数据库、Eclipse开发工具等。 数据库设计:根据抖音矩阵系统的需求&…

安全入门day01

一、常用名词 1、前后端 (1)前端 前端主要负责用户界面的展示和交互。它通常包括HTML、CSS和JavaScript等技术的使用,也可能使用各种前端框架和库,如React、Vue.js、Angular等,来构建更加复杂和动态的用户界面。前端…

Flowable的学习一

今日项目用到了Flowable。简单记录下。 学习中 参考了网上资料: 工作流-Activiti7-基础讲解_activity工作流-CSDN博客 https://juejin.cn/post/7158342433615380517 flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者…

Windows系统如何本地部署Ollama并运行千文qwen大模型详细教程

文章目录 前言1. 运行Ollama2. 安装Open WebUI2.1 在Windows系统安装Docker2.2 使用Docker部署Open WebUI 3. 安装内网穿透工具4. 创建固定公网地址 前言 本文主要介绍如何在Windows系统快速部署Ollama开源大语言模型运行工具,并安装Open WebUI结合cpolar内网穿透软…

Unity动画系统(4)

6.3 动画系统高级1-1_哔哩哔哩_bilibili p333- 声音组件添加 using System.Collections; using System.Collections.Generic; using UnityEngine; public class RobotAnimationController : MonoBehaviour { [Header("平滑过渡时间")] [Range(0,3)] publ…

java文本比较解决方案

参考资料 VBA计算页码和行号https://learn.microsoft.com/zh-cn/office/vba/api/word.wdinformation 概述: 最近在做word文档对比的,总结了几种解决方案,记录一下 在java中,常用的文本对比方案有如下几种: 差异比较…

Git分支合并以及分支部分合并 提交记录合并

Git分支合并,以及分支部分合并,提交记录合并 最近工作中用到git分支合并的场景,记录一下. 分支整体合并,合并所有记录 仅合并分支部分代码

【Django】网上蛋糕商城后台-类目管理

1.类目管理列表实现 当管理员进入后台管理后,点击类目管理,向服务器发出请求 path(admin/type_list/,viewsAdmin.type_list), # 处理商品分类管理列表请求 def type_list(request):# 读取分页页码try:ym request.GET["ym"]except:ym 1# 查…

Leetcode算法题(链表的中间节点+返回倒数第k个节点+合并两个有序链表)

题目1: 本题力扣链接:https://leetcode.cn/problems/middle-of-the-linked-list/solutions/164351/lian-biao-de-zhong-jian-jie-dian-by-leetcode-solut/ 思路1:单指针法 首先我们对链表进行遍历,记录链表的总长度N,…

Postgresql导入几何数据的几种方式

postgis方式导入 1.直接使用postgis客户端方式导入 首先,电脑要安装postgresql和对应版本的postgis。然后通过postgis客户端软件连接到postgresql数据库。然后导入。具体详细操作如下所示: 第一步:首先要再postgis中创建数据库 Create da…