获取并编译springframework的源代码(5.1.x)

1,088 阅读2分钟

参考:juejin.cn/post/684790…

本地环境下获取springframework的源代码的方法

本地JDK:11.0.6
Gradle(5.6.3):C:\LagouDujin\gradle-5.6.3-bin.zip

1. 使用git获取springframework的源代码

1.1.在任意磁盘路径下新建一个文件夹,名称随便取,建议为SpringFramWork

例如:C:\LagouDujin\SpringFramWork

1.2.进入SpringFramWork文件夹中,打开git命令行,输入以下命令

git clone https://github.com/spring-projects/spring-framework.git

1.3. 将代码切换为origin/5.1.x

git checkout origin/5.1.x

2. 添加阿里云镜像

在编译过程中,Spring会去自动下载一些依赖的包,默认使用的是官方的镜像,下载比较慢,所以我们提前添加好国内镜像,将下面这行代码粘贴到build.gradle文件中的repositories节点下即可 ,

//添加阿里云镜像
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }

3. 由于默认的git复制下来的代码的origin/5.1.x版本的gradle-wrapper.properties里面的gradle-4.10.3-bin.zip不兼容JDK 11.0.6 所以要修改一下

3.1. 报错的内容:

Found invalid Gradle JVM configuration: JDK 11.0.6 isn't compatible with Gradle 4.10.3. Please fix JAVA_HOME environment variable.

3.2. 配置对象文件:

C:\LagouDujin\SpringFramWork\spring-framework\gradle\wrapper\gradle-wrapper.properties

3.2.1. 需要修改的地方:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-bin.zip

3.2.2. 配置内容:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
#distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-bin.zip
distributionUrl=file\:///C\:/LagouDujin/gradle-5.6.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

3. 导入工程

C:\LagouDujin\SpringFramWork\spring-framework

4. 工程导入之后执行下面的编译(可以如下命令行编译,也可以使用IDEA里面的Gradle的插件编译):

4.1. 编译spring-core

gradlew :spring-core:compileTestJava

4.2. 编译spring-oxm

gradlew :spring-oxm:compileTestJava

4.3. 编译spring-context

gradlew :spring-context:compileTestJava

4.4. 编译spring-beans

gradlew :spring-beans:compileTestJava

4.5. 编译spring-aspects

gradlew :spring-aspects:compileTestJava

4.6. 编译spring-aop

gradlew :spring-aop:compileTestJava


5. 创建 HelloWord程序,分析源码(例如:创建 SpringMVC 的Helloword程序,分析SpringMVC源码)

5.1. 配置文件

C:\LagouDujin\SpringFramWork\spring-framework\spring-lagou-mvc\src\main\resources\springmvc.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"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd
">

    
    <!--开启controller扫描-->
    <context:component-scan base-package="com.lagou.edu.controller"/>


    <!--配置springmvc的视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>


    <!--
        自动注册最合适的处理器映射器,处理器适配器(调用handler方法)
    -->
    <!--<mvc:annotation-driven/>-->

</beans>

5.2 web.xml

C:\LagouDujin\SpringFramWork\spring-framework\spring-lagou-mvc\src\main\webapp\WEB-INF\web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
		 version="3.1">

	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath*:springmvc.xml</param-value>
		</init-param>

	</servlet>

	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>

5.3. jsp文件

C:\LagouDujin\SpringFramWork\spring-framework\spring-lagou-mvc\src\main\webapp\WEB-INF\jsp\success.jsp

<%@ page language="java" isELIgnored="false" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

       <html>
       <head>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       <title>Insert title here</title>
       </head>
       <body>
              <%System.out.println("跳转到页面");%>
              跳转成功!服务器时间:${date}
       </body>
       </html>

5.4. Controller文件(注解形式)

package com.lagou.edu.controller;

import org.springframework.http.RequestEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.FlashMap;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.support.RequestContextUtils;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.UUID;

@Controller
@RequestMapping("/demo")
public class DemoController  {

    @RequestMapping("/handle01")
    public String handle01(String name,Map<String,Object> model) {
		System.out.println("++++++++handle01处理中....");
        Date date = new Date();
        model.put("date",date);
        return "success";
    }
}