使用idea和gradle编译spring5.1.x源码

版本工具:spring5.1.x,gradle-5.6.3,jdk-11.0.7,IntelliJ IDEA 2021.1.3

1、下载gradle

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

java idea 打印gradle依赖 idea打包gradle项目_Gradle

下载gradle-bin

2、配置环境变量

解压到指定目录:

java idea 打印gradle依赖 idea打包gradle项目_gradle_02

java idea 打印gradle依赖 idea打包gradle项目_gradle_03


双击Path,新建bin目录,Win11环境,最好不要用%GRADLE_HOME%\bin,会出问题,直接用路径即可。

配置好环境变量后,输入win+r,输入cmd进入到dos界面,键入gradle -v,若输出正确的版本信息就说明成功了。

java idea 打印gradle依赖 idea打包gradle项目_gradle_04

3、配置gradle本地仓库

新增GRADLE_USER_HOME,指定本地路径。

java idea 打印gradle依赖 idea打包gradle项目_maven_05

4、下载spring源码

https://github.com/搜索spring

java idea 打印gradle依赖 idea打包gradle项目_spring_06

找到spring-projects

java idea 打印gradle依赖 idea打包gradle项目_Gradle_07

找到main,选择5.1.x版本。

java idea 打印gradle依赖 idea打包gradle项目_gradle_08

下载压缩包:

java idea 打印gradle依赖 idea打包gradle项目_gradle_09

解压到指定目录:

java idea 打印gradle依赖 idea打包gradle项目_spring_10

5、将spring源码导入到idea

File==>New==>Project from Existing Sources…

java idea 打印gradle依赖 idea打包gradle项目_Gradle_11

检查项目Gradle项目版本:

File==>Project Structure… 或者 Ctrl + Alt + Shift + S

java idea 打印gradle依赖 idea打包gradle项目_java_12

java idea 打印gradle依赖 idea打包gradle项目_java_13

设置Gradle

java idea 打印gradle依赖 idea打包gradle项目_spring_14

设置本地Gradle和JVM版本。

把 Generate *.impl files for modules imported from Gradle勾上

java idea 打印gradle依赖 idea打包gradle项目_java_15

修改gradle配置为https://services.gradle.org/distributions/gradle-5.6.3-bin.zip

java idea 打印gradle依赖 idea打包gradle项目_java_16

点击按键,同步一下:

java idea 打印gradle依赖 idea打包gradle项目_gradle_17

然后进入,漫长的等待中…

build完后。

6、编译spring-core 和 spring-oxm

Gradle==>spring-core==>Tasks==>other==>compileTestJava 双击:

java idea 打印gradle依赖 idea打包gradle项目_java_18

编译成功:

java idea 打印gradle依赖 idea打包gradle项目_maven_19

Gradle==>spring-oxm==>Tasks==>other==>compileTestJava 双击:

java idea 打印gradle依赖 idea打包gradle项目_java_20

编译spring-oxm时会报一个log4j-slf4j-impl-2.11.2.jar 找不到的错误。

修改build.gradle,加上以下内容:

maven { url "https://repo.maven.apache.org/maven2"}
maven { url "https://repo1.maven.org/maven2"}

java idea 打印gradle依赖 idea打包gradle项目_maven_21

打开链接:https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-slf4j-impl/2.11.2/

把以下文件下载到本地maven目录下:

java idea 打印gradle依赖 idea打包gradle项目_gradle_22

java idea 打印gradle依赖 idea打包gradle项目_java_23


 编译成功:

java idea 打印gradle依赖 idea打包gradle项目_spring_24

7、测试一下,源码是否编译成功

添加模块:new->model->gradle–>输入模块名称

java idea 打印gradle依赖 idea打包gradle项目_gradle_25

选择Gradle

java idea 打印gradle依赖 idea打包gradle项目_gradle_26

选择spring,输入模块名称:

java idea 打印gradle依赖 idea打包gradle项目_gradle_27

添加项目依赖:

java idea 打印gradle依赖 idea打包gradle项目_java_28

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

刷新,同步一下:

java idea 打印gradle依赖 idea打包gradle项目_maven_29

把包路径建好,随意搞几个类:

java idea 打印gradle依赖 idea打包gradle项目_gradle_30

UserEntity:

package com.lz.entity;

public class UserEntity {

   private String id;

   private String name;

   public String getId() {
      return id;
   }

   public void setId(String id) {
      this.id = id;
   }

   public String getName() {
      return name;
   }

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

UserService:

package com.lz.service;

public interface UserService {

   UserService queryUser(String id);
}

UserServiceImpl:

package com.lz.service.impl;


import com.lz.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

	public UserService queryUser(String id) {
		System.out.println("queryUser====>张三");
		return null;
	}
}

AppTest:

package com.lz.test;

import com.lz.service.UserService;
import com.lz.service.impl.UserServiceImpl;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration
@ComponentScan("com.lz")
public class AppTest {
   public static void main(String[] args) {
      AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppTest.class);

      UserService bean = context.getBean(UserService.class);
      bean.queryUser("1");


   }
}

java idea 打印gradle依赖 idea打包gradle项目_maven_31

成功!!!

java idea 打印gradle依赖 idea打包gradle项目_spring_32


源码已上传,没成功的朋友可以直接下载使用: