侧边栏壁纸
  • 累计撰写 101 篇文章
  • 累计创建 89 个标签
  • 累计收到 9 条评论

Spring5.3.x源码环境搭建(保姆级教程)

bearjun
2023-08-23 / 0 评论 / 0 点赞 / 402 阅读 / 4,695 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-08-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Spring5.3.x源码环境搭建(保姆级教程)

前提说明

最近第三次看Spring源码学习,前面由于过程太过痛苦都是看到一半,这次想着最后一次。这次一定要坚持下去。没想到Spring源码环境的搭建也不容易。

本篇文章记录博主从各个环境准备到运行跑出测试结果,以及中间遇到的这种问题。

最新补充:如果不想搭建,可以直接用我的学习源码,进行Spring源码学习。
spring-source-study项目下载地址,此版本为5.3.12。部分源码添加相关注解和说明,便于学习。

各个版本说明:

Idea版本:2021.3.3
Java版本:15
Gradle版本:7.2
Spring源码版本:5.3.x

话不多说,直接开始吧。

环境准备和各种软件下载安装

  • Idea下载和安装

    这个不多说,相信都点进来了,这个肯定都安装了。由于各个版本有点区别,可能操作有点不同。

  • Java下载和安装

    这个地方并不需要我们下载和安装Java。我们只需要下载编译包导入到idea就行。

    • 进入下载界面,找到编译包下载。(下载可能需要登录账号,随便注册一个就好)

      2023-08-22_112147

    • 解压编译包,导入到idea。

      首先点击右上角的小齿轮,再点Project Structure,就会弹出这个添加的框。然后找到SDKs,点击+,找到Add JDK...。最后找到刚下下载解压的文件夹即可。

      2023-08-22_112426

  • Gradle的下载和安装

    • 进入官网下载页面,找到7.2版本的并下载

      2023-08-22_113242

    • 配置环境变量

       # 类似于Java的环境变量配置。
      1、添加 GRADLE_HOME,值为gradle解压之后的地址。例如:D:\Tools\gradle-7.5
      2、在path系统变量中,添加 %GRADLE_HOME%\bin
      3、添加 GRADLE_USER_HOME 环境变量,值为你想指定的gradle仓库的地址。例如:D:\gradle_repository
      

      2023-08-22_114328

    • 添加init.gradle配置文件。在gradle的解压目录,找到init.d文件夹,进入文件夹,创建一个init.gradle文件,复制以下内容。

      gradle.projectsLoaded {
          rootProject.allprojects {
              buildscript {
                  repositories {
                      def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
                      def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
                      def NEXUS_URL = 'https://maven.aliyun.com/nexus/content/repositories/jcenter'
                      all { ArtifactRepository repo ->
                          if (repo instanceof MavenArtifactRepository) {
                              def url = repo.url.toString()
                              if (url.startsWith('https://jcenter.bintray.com/')) {
                                  project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
                                  println("buildscript ${repo.url} replaced by $JCENTER_URL.")
                                  remove repo
                              }
                              else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
                                  project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
                                  println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
                                  remove repo
                              }
                              else if (url.startsWith('https://repo1.maven.org/maven2')) {
                                  project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                                  println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
                                  remove repo
                              }
                          }
                      }
                      jcenter {
                          url JCENTER_URL
                      }
                      google {
                          url GOOGLE_URL
                      }
                      maven {
                          url NEXUS_URL
                      }
                  }
              }
              repositories {
                  def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
                  def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
                  def NEXUS_URL = 'https://maven.aliyun.com/nexus/content/repositories/jcenter'
                  all { ArtifactRepository repo ->
                      if (repo instanceof MavenArtifactRepository) {
                          def url = repo.url.toString()
                          if (url.startsWith('https://jcenter.bintray.com/')) {
                              project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
                              println("buildscript ${repo.url} replaced by $JCENTER_URL.")
                              remove repo
                          }
                          else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
                              project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
                              println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
                              remove repo
                          }
                          else if (url.startsWith('https://repo1.maven.org/maven2')) {
                              project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                              println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
                              remove repo
                          }
                      }
                  }
                  jcenter {
                      url JCENTER_URL
                  }
                  google {
                      url GOOGLE_URL
                  }
                  maven {
                      url NEXUS_URL
                  }
              }
          }
      }
      

      PS:这个文件大致就是配置第三方下载地址,方便下载依赖。

  • Spring源码的下载

    建议直接在Gitee里面下载,下载地址,注意要从master切换成5.3.x。然后直接在线zip文件即可。

    2023-08-22_135926

导入到idea,配置相关环境

晚上上面的步骤,其准备工作就已经完成,下面就是导入到idea,然后坐相关的配置工作。

  • 解压spring-framework,导入到idea。然后找到解压的目录,选择确认即可。如果需要选择导入项目的类型,及得勾选Gradle

    2023-08-22_140531

    2023-08-22_140750

  • 修改项目相关的配置。点击右上角的小齿轮,再点Project Structure。然后修改项目的的jdk版本为15。

    2023-08-22_140923

  • 修改idea中关于Gradle相关的配置。点击setting,搜索找到gradle,修改下面的信息。其中use Gradle from修改成Specified Location。然后选择自己gradle的解压目录。Gradle JVM修改成15

    2023-08-22_141138

  • 重载项目,刷新下载依赖。第一次刷新的时候,可能比较慢,需要等待一下

    2023-08-22_141641

遇到的问题和解决方法

提示不是.git项目

提示不是git项目,缺少git信息。

# 1、初始化项目
git init

# 2、把项目交给git
git add --all

# 3、提交
git commit -m 'first commit'

2023-08-22_164424

依次运行上面的命令,等待完成。

修改根目录下的build.gradle里面的内容
  • org.eclipse.persistence.jpamaven地址错误,修改版本为2.7.7

2023-08-22_160832

  • log4j-coremaven地址错误,修改版本为2.17.1

2023-08-22_160923

  • Can not load tasks for root project 'spring'错误,注释task代码

2023-08-22_163853

上面所有的问题解决,就可以看到最终的运行了。恭喜你,初步的搭建已经成功!

2023-08-22_164032

创建自己的项目,测试运行

新建一个module。选择Gradle项目,然后填写自己的项目名称。点击完成。

2023-08-22_170707

2023-08-22_170721

然后创建如下几个文件:

person.class

public class Person {

	private String name;

	public Person() {
	}

	public String getName() {
		return name;
	}

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

XmlMainTest.xml

public class XmlMainTest {

	public static void main(String[] args) {
		ApplicationContext app = new ClassPathXmlApplicationContext("beans.xml");

		Person person = app.getBean(Person.class);
		System.out.println(person);
	}
}

beans.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"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean class="com.bearjun.spring.study.bean.Person" id="person">
		<property name="name" value="bearjun" />
	</bean>

</beans>

目录结构如下:

2023-08-23_101516

最后启动main方法。答应最后的测试结果。说明我们的源码搭建已经完成。

2023-08-23_101714

最后说明:由于各个版本之间的配置和搭建还是有区别的。如果遇到其他问题,欢迎大家留言讨论。

0

评论区