在一心想要学习Spring框架源码时,咱们会遇到不少麻烦的问题。开始本文前,你只须要拥有一个装好IDEA的Ubuntu系统就能够愉快启程了。若是尚未IDEA,能够参考在Ubuntu上安装Intellij IDEA并建立桌面快捷方式,至于Git ,Gradle ,Java 能够选择事先安装好,也能够跟随本文在遇到对应问题时再安装。php
项目 | 版本号 | 是否须要提早安装好 |
---|---|---|
Ubuntu | 18.04 LTS | 是 |
Intellij IDEA | 2019.1.3 | 是 |
Git | 2.17.1 | 否 |
Gradle | 5.5 | 否 |
Java | 1.8 | 否 |
URL:
https://github.com/spring-projects/spring-framework.git
html
方案选择及理由:我选择了使用默认包安装Git(且我没有作设置Git的操做),由于我搭建的主要目标是上手一套源码阅读环境,因此快捷的方式更好。如下是指令:java
sudo apt update sudo apt install git
第一次执行时出现这个报错,且sudo apt update
执行过程当中也有一些更新失败的报错。后来休息了一段时间我又从新回来作的,第二次用的是apt-get
linux
sudo apt-get update sudo apt install git
执行完成后重启IDEA,就能够Git spring-framework代码了git
网上Ubuntu安装Git的文章中apt和apt-get指令都有,那有什么区别呢?
参考这篇文章Linux中apt与apt-get命令的区别与解释github
* 简单补充几点:web
apt
命令是在Ubuntu 16.04 引入的。apt-get
虽然没被弃用,但做为普通用户,仍是应该首先使用 apt
。apt 命令 | 取代的命令 | 命令的功能 |
---|---|---|
apt install | apt-get install | 安装软件包 |
apt remove | apt-get remove | 移除软件包 |
apt purge | apt-get purge | 移除软件包及配置文件 |
apt update | apt-get update | 刷新存储库索引 |
apt upgrade | apt-get upgrade | 升级全部可升级的软件包 |
apt autoremove | apt-get autoremove | 自动删除不须要的包 |
apt full-upgrade | apt-get dist-upgrade | 在升级软件包时自动处理依赖关系 |
apt search | apt-cache search | 搜索应用程序 |
apt show | apt-cache show | 显示装细节 |
若是像我同样只是为了读spring源码,Gitee码云上有个快速的git地址spring
使用如下地址:
★https://gitee.com/mirrors/Spring-Framework.git
代替
https://github.com/spring-projects/spring-framework.git
shell
Directory我仍然使用的是/spring-framework(而没用/Spring-Framework),是由于能够接着以前Github的下载结果继续gitapache
咱们已经有一个项目在~/IdeaProjects/spring-framework
下了,可是在打开项目时再次遇到问题:
官网下载JDK都要Oracle帐号单点登陆了,常常要下JDK的仍是建议注册一个Oracle帐号
有时候,下载个JDK要6个多小时,这谁顶得住啊?
华为镜像:https://repo.huaweicloud.com/java/jdk/
修改环境变量的时候用如下指令解决权限问题:
sudo su vi /etc/profile
打开vi编辑器以后,G
跳到文档底部,按i
进入插入模式,并从光标当前位置开始输入;按a
进入插入模式,从目前光标所在位置的下一个位置开始输入文字;
按o
进入插入模式,并插入新的一行,从行首开始输入文字。
按x
删除字符,最后按ESC
并输入:qw
保存离开
source /etc/profile java -version
我下载的是https://repo.huaweicloud.com/java/jdk/8u202-b08/ 中的jdk-8u202-linux-x64.tar.gz
oracle官网checksum:
https://www.oracle.com/webfolder/s/digest/8u202checksum.html
FileName | CheckSum |
---|---|
jdk-8u202-linux-x64.tar.gz | sha256: 9a5c32411a6a06e22b69c495b7975034409fa1652d03aeb8eb5b6f59fd4594e0 |
md5: 0029351f7a946f6c05b582100c7d45b7 |
获取本地文件摘要的Shell指令:
sha256sum <filename> md5sum <filename>
二者一校对,没毛病
Configure
->Structure for New Projects
New..
选择刚才安装的JDK目录,例如个人/usr/local/jdk1.8.0
下载
官方下载地址:https://gradle.org/releases
cd /usr/local sudo mkdir gradle sudo unzip -d /usr/local/gradle ~/下载/gradle-5.5-bin.zip
这里为啥要建一个gradle文件夹呢?由于开发时经常会用到多个不一样版本gradle,因此建个gradle放全部gradle文件
sudo su vi /etc/profile
使环境变量生效
source /etc/profile
gradle -v
配置IDEA GRADLE_HOME
选择IDEA-File
-Settings
,打开设置,而后搜索gradle
,
选择Use local Gradle distribution
,输入Gradle home:
/usr/local/gradle/gradle-5.5
再次尝试编译spring源码
能够直接点击小锤子,或者点击Build
-Build Project
cd ~/.gradle/ touch init.gradle vi init.gradle
allprojects{ repositories { def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/' all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/') || url.startsWith('https://repo.maven.apache.org') || url.startsWith('https://repo.spring.io')) { remove repo } } } maven { url REPOSITORY_URL } } }
配置以后改成从aliyun下载了,这样就说明成功了
若是不是从
maven.aliyun.com
下载仍是从repo.spring.io
或者repo.maven.apache.org
下载,可能init.gradle还有些问题,好比https误写成http
等,建议当即中止build,修改init.gradle以后从新build。另外,整个build过程可能还有点耗时,可是至少Download时不会卡住了。
你多是程序包org.springframework.cglib.core
或者org.springframework.cglib.proxy
中的类找不到符号
,好比org/springframework/cglib/proxy/MethodProxy.java
文件报错,以下图:
也多是程序包org.springframework.objenesis
中的类找不到符号,又或者是org/springframework/objenesis/SpringObjenesis.java
文件报错,以下图:
其实官方对于这个错误早有提示,只是我们一直没注意而已:
你也能够选择看这篇摘抄,也能够直接读源码中的文件
https://www.cnblogs.com/zaid/articles/11147818.html
官方说得很简单,因而我就在IDEA的Terminal中尝试:
JAVA_HOME is not set and no 'java' command could be found in your PATH.
这个错误主要是说没有配置Java环境变量,那我就直接执行如下source /etc/profile
cp ~/下载/gradle-5.5-bin.zip gradle/wrapper
修改spring-framework/gradle/wrapper/gradle-wrapper.properties中的distributionUrl=gradle-5.5-bin.zip
,以下图:
再次执行./gradlew :spring-oxm:compileTestJava
(注意:大家输入是用英文:
代替我这里输入的中文冒号:
)
报错文件org/springframework/transaction/aspectj/AspectjTransactionManagementConfiguration.java
,找不到类AnnotationTransactionAspect
,以下图
下载AspectJ的最新稳定版本
http://www.eclipse.org/aspectj/downloads.php#stable_release
cd ~/下载/ source /etc/profile java -jar aspectj-1.9.4.jar
而后就打开了一个安装交互界面,我全点的Next,最后完成时有推荐去作的事,以下图(咱们在4.配置环境变量中完成)
配置Aspectj环境变量
如图所示
4.2 Facets新增AspectJ
4.3 选中spring-aspects_main
4.4 移除Modules中spring-aspects/main下的Kotlin只留下AspectJ
4.5 更改编译器:
搜索Java Compiler,切换Use Compiler由Java
到Ajc
,Path to Ajc Compiler填写/home/zaid/aspectj1.9/aspectjtools.jar
,选中Delegate to Javac