spring 5.3.x 、6.1.x、6.0.x 源码本地编译运行
创始人
2024-12-26 22:41:17
0

参考大佬文章,完美完成本地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版本

相关内容

热门资讯

1分钟秒懂!阿拉斗牌外挂!(透... 1分钟秒懂!阿拉斗牌外挂!(透视)外挂辅助神器(2023已更新)-哔哩哔哩;人气非常高,ai更新快且...
第二个了解!nzt德州软件透明... 第二个了解!nzt德州软件透明挂辅助透视挂,wpk长期盈利打法教学(真实有挂)-哔哩哔哩是一款可以让...
4分钟了解!(米乐)外挂透明挂... 4分钟了解!(米乐)外挂透明挂辅助器神器!(透视)详细教程(2022已更新)(哔哩哔哩)是一款可以让...
六分钟秒懂!闽游十三水专用平台... 自定义新版闽游十三水专用平台辅助器系统规律,只需要输入自己想要的开挂功能,一键便可以生成出闽游十三水...
二瞬间秒懂!(天天贰柒拾)外挂... 二瞬间秒懂!(天天贰柒拾)外挂透视辅助器插件!(透视)详细教程(2020已更新)(哔哩哔哩)是一款可...
第九实锤!来玩德州软件透明挂辅... 第九实锤!来玩德州软件透明挂辅助脚本,wpk辅助机器人(有挂细节)-哔哩哔哩;亲,有的,ai轻松简单...
第两了解!竞技德州联盟扑克外挂... 第两了解!竞技德州联盟扑克外挂辅助器插件,wpk微扑克模拟器(有挂教学)-哔哩哔哩;1、完成竞技德州...
8分钟了解!(德州约局吧)外挂... 8分钟了解!(德州约局吧)外挂透视辅助器开挂!(透视)详细教程(2022已更新)(哔哩哔哩)是一款可...
1分钟秒懂!白金岛跑得快样来好... 1分钟秒懂!白金岛跑得快样来好牌!(透视)外挂辅助器作弊(2021已更新)-哔哩哔哩是一款可以让一直...
Python 下载的9种方法,... import requestsurl = ‘xxxxxxxx’ # 目标下载链接r =...