本地环境下获取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";
}
}