如何导入spring源码到IDEA

简介: 如何导入spring源码到IDEA

这篇文章主要介绍了如何导入spring源码到IDEA,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

目录

前期准备

     1.访问spring官网下载spring framework源码

    2.安装gradle

导入spring源码到IDEA

    1.打开spring-framework-5.0.5.RELEASE下的import-into-idea.md,看下官方导入IDEA的步骤

    2.导入IDEA步骤

        2.1打开IDEA点击import project,不要点open

        2.2配置项目的gradle

        2.3项目配置

        2.4排除spring-aspects模块

        2.5编译spring-oxm

        2.6项目build。

        2.7查看项目是否build好

        2.8编译其他模块.

    3.简单调试

        3.1新建模块

        3.2测试

环境:IDEA2019.3, jdk1.8.0_191,spring-framework-5.0.5.RELEASE,gradle-4.4.1

前期准备

1.访问spring官网下载spring framework源码

图片.png

spring源码放在了github,点击如下图中的按钮访问(有可能访问不了github官网,可参考此处)

图片.png

如下图步骤选择要下载的spring源码版本

图片.png

点击code–》Download ZIP下载

图片.png

解压到某个目录下

图片.png

2.安装gradle

到解压的spring源码目录下spring-framework-5.0.5.RELEASE\gradle\wrapper,打开gradle-wrapper.properties文件查看需要安装的gradle版本(此处:gradle-4.4.1-bin.zip)。

图片.png

访问gradle官网https://gradle.org/releases/,下滑找到需要的版本,点击binary-only下载

图片.png

直接解压到你想要的目录下

图片.png

在gradle的init.d目录下新建build.gradle,写入如下代码。目的是编译源码的时候快些

图片.png

allprojects{
 repositories {
  def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
  def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
  all { ArtifactRepository repo ->
   if(repo instanceof MavenArtifactRepository){
    def url = repo.url.toString()
    if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('http://repo1.maven.org/maven2')) {
     project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
     remove repo
    }
    if (url.startsWith('https://jcenter.bintray.com/') || url.startsWith('http://jcenter.bintray.com/')) {
     project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
     remove repo
    }
   }
  }
  maven {
   url ALIYUN_REPOSITORY_URL
   url ALIYUN_JCENTER_URL
  }
 }
buildscript{
  repositories {
   def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
   def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
   all { ArtifactRepository repo ->
    if(repo instanceof MavenArtifactRepository){
     def url = repo.url.toString()
     if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('http://repo1.maven.org/maven2')) {
      project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
      remove repo
     }
     if (url.startsWith('https://jcenter.bintray.com/') || url.startsWith('http://jcenter.bintray.com/')) {
      project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
      remove repo
     }
    }
   }
   maven {
    url ALIYUN_REPOSITORY_URL
    url ALIYUN_JCENTER_URL
   }
  }
 }
}

设置gradle的环境变量(类似设置jdk的环境变量)。新建GRADLE_HOME系统变量,变量值为自己解压的gradle目录

图片.png

编辑path变量,在后面追加%GRADLE_HOME%\bin

图片.png

cmd输入gradle -v验证是否安装并配置好gradle。如下图所示那样就已经配置好gradle了

图片.png

新建gradle仓库(repository),比如:

图片.png

这一步可以不做,改下spring源码目录下spring-framework-5.0.5.RELEASE\gradle\wrappe\gradle-wrapper.properties文件的distributionUrl的值(本地安装的gradle路径),不然编译spring源码的时候会去下载gradle

图片.png

导入spring源码到IDEA

1.打开spring-framework-5.0.5.RELEASE下的import-into-idea.md,看下官方导入IDEA的步骤

图片.png

steps:
1)编译spring-oxm模块,这一步看2.5
2)选择spring-framework-5.0.5.RELEASE下builde.gradle文件导入IDEA
3)排除spring-aspects模块,这一步看2.4

2.导入IDEA步骤

2.1打开IDEA点击import project,不要点open

图片.png

然后点击spring-framework-5.0.5.RELEASE下builde.gradle文件

图片.png

2.2配置项目的gradle

图片.png

图片.png

2.3项目配置

图片.png

图片.png

2.4排除spring-aspects模块

spring-aspects模块使用了aspectJ的jar,所以要先排除。不然很可能中途编译spring源码失败,等到spring源码编译好了可以参考spring源码项目使用spring-aspects,配置

图片.png

2.5编译spring-oxm

使用gradle :spring-oxm:compileTestJava编译spring-oxm模块,下图是我这边编译成功的图

图片.png

2.6项目build。

项目build要下载spring-framework需要的jar,此过程一般要很长的时间。如果在项目build的过程中失败,可以重新build或者重新打开项目

图片.png

2.7查看项目是否build好

项目build好后gradle面板和module面板就是这样的,和刚导入项目时不一样

图片.png

图片.png

2.8编译其他模块.

可能还有其它模块没有编译(如:spring-web、spring-orm。。。),可以选择spring–>Tasks–>other–>compileTestJava编译其他模块

图片.png

编译好的模块下面一般会有build目录,build目录下有个classes目录存放编译好的字节码文件

图片.png

3.简单调试

到这里已经构建好了spring源码项目,可以在spring下新建模块来测试环境是否有问题

3.1新建模块

project structure–》modules–》spring–》add–》new module

图片.png

确保要新建的模块的信息如下图,然后点击next

图片.png

填好parent、模块名称点击finish,点击ok

图片.png

稍等一会就可以看到新建的模块

图片.png

3.2测试

创建BeanEntity配置类

图片.png

新建Test测试,从运行结果看完全没有问题

图片.png

注意:我用的环境:IDEA2019.3, jdk1.8.0_191,spring-framework-5.0.5.RELEASE,gradle-4.4.1
环境不同可能中途会有些其他问题

到此这篇关于如何导入spring源码到IDEA的文章就介绍到这了,更多相关导入spring源码到IDEA内容请搜索"java开发全栈"以前的文章或继续浏览下面的相关文章希望大家以后多多支持"java开发全栈"!

相关文章
|
4天前
|
JavaScript Java 关系型数据库
自主版权的Java诊所管理系统源码,采用Vue 2、Spring Boot等技术栈,支持二次开发
这是一个自主版权的Java诊所管理系统源码,支持二次开发。采用Vue 2、Spring Boot等技术栈,涵盖患者管理、医生管理、门诊管理、药店管理、药品管理、收费管理、医保管理、报表统计及病历电子化等功能模块。
|
10天前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
|
10天前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
16天前
|
设计模式 JavaScript Java
Spring 事件监听机制源码
Spring 提供了事件发布订阅机制,广泛应用于项目中。本文介绍了如何通过自定义事件类、订阅类和发布类实现这一机制,并展示了如何监听 SpringBoot 启动过程中的多个事件(如 `ApplicationStartingEvent`、`ApplicationEnvironmentPreparedEvent` 等)。通过掌握这些事件,可以更好地理解 SpringBoot 的启动流程。示例代码展示了从事件发布到接收的完整过程。
|
16天前
|
Java 应用服务中间件 Maven
idea+maven+tomcat+spring 创建一个jsp项目
这篇文章介绍了如何在IntelliJ IDEA中使用Maven和Tomcat创建一个JSP项目,包括配置Maven依赖、设置Tomcat服务器、编写JSP页面、创建控制器和配置文件,以及项目的运行结果。
62 0
idea+maven+tomcat+spring 创建一个jsp项目
|
10天前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
24 0
|
10天前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
35 0
|
前端开发 Java 数据库连接
【springcloud合集】03:IDEA新建父工程project
【springcloud合集】03:IDEA新建父工程project
375 0
【springcloud合集】03:IDEA新建父工程project
|
1月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
10天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
55 2