springboot gradle springboot源码学习 jetbrain 环境配置

springboot gradle,笔者用到的所有工具的版本号不是最新的,而且笔者哪怕去找较新的版本也不会使用最新版本,因为最新版本往往会有很多不可控的问题,所以一般最高使用的是次新版本。springboot下载源码时可能遇到的问题在之前的篇幅中已经介绍过了。本篇重点记录在jetbrain IntelliJ IDEA中配置springboot源码基于gradle构建的环境并运行部分smoke-test的过程。

  1. 环境版本说明
  • Windows 10
  • java version “1.8.0_40”
  • IntelliJ IDEA 2018.3.6
  • Apache Maven 3.6.1
  • Gradle 7.2 (笔者最初设想的版本,但是编译时会有坑,后边有修正成6.9.1)
  • git version 2.21.0.windows.1
  1. 工具安装配置

(1) JDK, 网上的教程很多,基本的思路和操作方式都是差不多的,大同小异,笔者提供一般不错的教程地址: https://www.runoob.com/w3cnote/windows10-java-setup.html

(2) Git & tortoisegit笔者在写教程的时候 git的最新版本已经到了2.34.0,与笔者的版本有出入,读者可以根据自己的需求去下载。下载地址的最后一个win说明是对应windows系统的,如果读者是mac或者linux系统可以去对应的地址下载。https://git-scm.com/download/win我们还可以再安装一个,tortoisegit–git的一个比较好用的客户端。它的下载地址如是: https://tortoisegit.org/download/ Tortosegit安装教程:https://www.cnblogs.com/xuwenjin/p/8573603.html 

(3) Maven & gradleMaven下载地址: https://maven.apache.org/download.cgiGradle 下载地址: https://services.gradle.org/distributions/Maven和Gradle 在windows系统的安装配置的过程同样不再提供具体的细节,读者自行查询,或者用笔者提供的教程地址去阅读后跟着安装配置https://www.runoob.com/maven/maven-repositories.html

(4) IntelliJ IDEA 2018.3.6下载地址: https://www.jetbrains.com/idea/download/#section=windowsIntellij IDEA的专业版有时间限制,网上有各种的破解方案又获取可以去某bao买一个便宜点的账号,如果读者有安全的白嫖方案亦可。

  1. GitHub找到springboot及源码拉取

找个gayhub的springboot地址:https://github.com/spring-projects/spring-boot

springboot github源码下载示例

在页面的右上角可以看到它stars和fork数量。我们想要得到源码一般就是这么几种方式,一是把源码fork到自己的github地址下,这么做的优势是可以做一个自己的分支,而且自己在源码中做一些改动还可以提交到自己分支中,并且还可以跟着主分支一起更新最新的代码,保持先进行;二是直接git clone master分支的源码,再一个就是直接下载当前版本的zip文件。笔者采用的是将源码fork到自己的分支下,然后直接用git下载到pc上。

  1. Git clone下载springboot

我们打开一个想要用来存放源代码的文件夹—>在文件夹的空白处【右键】–>会弹出如下的界面:我们会看到Git Bash Here 和 Git Clone (如果没有安装TortoiseGit没有Git Clone这个选项) 这些选项,这两个选项任意一个都可以把我们需要的代码下载到本地。

区别: Git Bash Here 命令行客户端; Git Clone 可视化客户端

TortoiseGit windows 快捷方式
springboot 下载示例
springboot git命令下载示例

问题一:直接git clone 总是time out,跟网络有一定的关系,不可描述的原因导致有些时候我们用gayhub的时候必须科学上网,如果没法科学上网那就多尝试几次,总有一年可以搞定。

timeout 报错示例

问题二:OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054, 这个时候需要关闭SSL CERT verification,通过命令 git config http.sslVerify “false”

如果还是报错,那就把全局的也调一下 git config –global http.sslVerify “false”

SSL_ERROR_SYSCALL 错误示例

问题三: error: unable to create file *****: Filename too long
原因是: git有可以创建4096长度的文件名,然而在windows最多是260处理方法是执行命令: git config –global core.longpaths true

  1. Intellij IDEA配置springboot源码及编译

打开我们的Intellij IDEA,然后通过打开按钮选择我们下载好的springboot, 如下图,(如果是不同版本的IDEA在操作界面上是有一些区别的,有的版本open 和 import Project是在一起的),找到我们的项目点击OK。

idea 载入springboot
idea 配置指定本地gradle 和maven仓库

问题一: MultipleCompilationErrorsException: startup failed 一般这种错误是Gradle的版本问题导致,而我们的教程在上图中已经给出来了答案,我们制定了版本但是在打开文件的时候由于笔者以前gradle历史版本的记录而没有修改成最新的gradle版本,也就是上图中的Gradle home那一栏的的默认值导致的gradle版本不同。

MultipleCompilationErrorsException 示例

问题二:AssertionFailedError  在编译的时候可能会遇到这种错误。类似下图, 这个问题的本质同样是由于gradle的版本问题导致的, 一般来说是gradle的版本比较高,没有与我们编译的springboot相对应才导致的这种错误。

distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip
AssertionFailedError 示例

最好的方式就是使用官方指定的gradle版本,而这个版本就在源码根目录下的gradle–wrapper–gradle-wrapper.properties文件中的distributionUrl给出了,我们只需要把对应版本的gradle下载到本地,并在IDEA的 File –>  Settings –> Build, Execution, Deployment –> Build Tools –> Gradle 中找到Gradle home 指定到本地的对应目录即可。如下图

gradlehome 配置

除了gradle的版本要对应正确之外,最关键的是要有几个配置项需要调整,在笔者参考的连接页面中已经解释的比较详尽了,但是笔者此处还是要强调一下,源码中调整的配置文件主要是为了配置maven的国内加速镜像以及调整gradle每次编译时使用的主要jar包工具等,总而言之就是为了爽。

  • 项目根目录下build.gradle[即文件路径:spring-boot/build.gradle],文件最开始添加如下配置
buildscript{
   repositories{
      maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'}
      maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
      maven { url 'https://repo.spring.io/plugins-release'}
   }
}
  • 项目根目录下settings.gradle[即文件路径:spring-boot/settings.gradle], 在pluginManagement–> repositories 中添加两行
pluginManagement {
   repositories {
      maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'}
      maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}

      mavenCentral() 
      ...
}
  • 项目子根目录buildSrc下的build.gradle[即文件路径:spring-boot/buildSrc/build.gradle], 在repositories中添加maven加速镜像的三行
repositories {
   maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'}
   maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
   maven { url 'https://repo.spring.io/plugins-release'}
   mavenCentral()
   gradlePluginPortal()
   maven { url "https://repo.spring.io/release" }
}
  • 项目子根目录buildSrc下的settings.gradle[即文件路径:spring-boot/buildSrc/settings.gradle], 在repositories中添加maven加速镜像的三行
pluginManagement {
   repositories {
      maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'}
      maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
      maven { url 'https://repo.spring.io/plugins-release'}
      mavenCentral()
      gradlePluginPortal()
   }
  • 项目子根目录gradle下的radle-wrapper.properties[即文件路径:spring-boot/gradle/wrapper/gradle-wrapper.properties], 修改distributionUrl,即gradle编译工具为本地的路径文件,否则每次编译的时候总是会去网上拉取文件
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
#distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip
distributionUrl=file:///C:/AppConfigs/gradle-6.9-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

只要gradle的版本对应好,基本的maven仓库和gradle配置没有问题的话再十几分钟的编译后总是可以通过的,当然读者可能会遇到各种Heap堆内存没有足够的空间的问题,那是读者的PC硬件参数偏低或者IDEA配置的问题,可以按照这个地址https://blog.csdn.net/smart_an/article/details/107219821的方式配置一下内存参数。

springboot编译成功
  1. 源码smoke-test冒烟测试

笔者主要运行了两个模块的smoke-test,分别是spring-boot-smoke-test-hibernate52和spring-boot-smoke-test-data-redis。笔者在运行冒泡测试Hibernate52Application的时候遇到了以下的问题。解决方法是升级一下kotlin插件,settings -> Languages & Frameworks -> kotlin(如下图)

Information:Kotlin: kotlinc-jvm 1.3.11 (JRE 1.8.0_40-b25)Information:2021/11/23 16:34 - Compilation completed with 1 error and 0 warnings in 12 s 48 msError:Kotlin: [Internal Error] java.lang.LinkageError: loader constraint violation: loader (instance of org/jetbrains/kotlin/cli/jvm/plugins/PluginURLClassLoader$SelfThenParentURLClassLoader) previously initiated loading for a different type with name "kotlin/sequences/Sequence"
升级kotlin插件

运行redis冒烟测试的时候如果没有任何的额外配置和修改,则会默认连接redis的本地地址路径,我们可以在模块下添加一个ymal文件来指定自己的redis地址,如下图在模块的main下添加一个resources文件夹,新建一个yml文件且文件被ide识别成绿叶子的样子即可。在文件中添加redis的配置信息。

somke-redis增加配置文件
spring:
  redis:
    port: 6739
    host: 1*.*.*.*
    password: ****

不论我们运行哪一个冒烟测试,如果需要额外的配置都可以按照spring的预定新建yaml文件或者properties文件;而且如果要debug进源代码也是可以的,跟中springboot的源码主要是跟进main函数的run方法,一层层的run方法点进去就可以看到springboot启动的时候所有的流程细节。