Ubuntu搭建Spring源码环境常见问题

在一心想要学习Spring框架源码时,咱们会遇到不少麻烦的问题。开始本文前,你只须要拥有一个装好IDEA的Ubuntu系统就能够愉快启程了。若是尚未IDEA,能够参考在Ubuntu上安装Intellij IDEA并建立桌面快捷方式,至于GitGradleJava 能够选择事先安装好,也能够跟随本文在遇到对应问题时再安装。php

环境信息

项目 版本号 是否须要提早安装好
Ubuntu 18.04 LTS
Intellij IDEA 2019.1.3
Git 2.17.1
Gradle 5.5
Java 1.8

1、咱们直奔主题Git源码:

IDEA-Git
IDEA-Clone

URL:https://github.com/spring-projects/spring-framework.githtml

问题1:Cannot Run Git

没有安装Git

解决方案:如何在Ubuntu系统上安装Git

方案选择及理由:我选择了使用默认包安装Git(且我没有作设置Git的操做),由于我搭建的主要目标是上手一套源码阅读环境,因此快捷的方式更好。如下是指令:java

sudo apt update
sudo apt install git

/var/lib/dpkg/lock资源暂时不可用
第一次执行时出现这个报错,且sudo apt update执行过程当中也有一些更新失败的报错。后来休息了一段时间我又从新回来作的,第二次用的是apt-getlinux

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-get命令之间的区别:
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 显示装细节

问题2:clone git慢

解决方案1:git clone速度太慢的解决办法

解决方案2(更推荐):

若是像我同样只是为了读spring源码,Gitee码云上有个快速的git地址spring

Gitee-Spring
使用如下地址:
https://gitee.com/mirrors/Spring-Framework.git
代替
https://github.com/spring-projects/spring-framework.gitshell

Directory我仍然使用的是/spring-framework(而没用/Spring-Framework),是由于能够接着以前Github的下载结果继续gitapache

Clone-Gitee

2、导入项目到IDEA

咱们已经有一个项目在~/IdeaProjects/spring-framework下了,可是在打开项目时再次遇到问题:

问题3:Please, set the Gradle JVM option

Gradle JVM Not Found

解决方案:安装JDK1.8!Ubuntu18.04 安装Jdk1.8

官网下载JDK都要Oracle帐号单点登陆了,常常要下JDK的仍是建议注册一个Oracle帐号

问题4:官网下载JDK慢

有时候,下载个JDK要6个多小时,这谁顶得住啊?

解决方案:参考博客# JDK下载过慢的问题解决方案

华为镜像: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>

文件摘要

二者一校对,没毛病

安装好JDK后以后还没完:

  1. 选择Welcome to IntelliJ IDEA的右下角Configure->Structure for New Projects
    Structure for New Projects
  2. 点击New..选择刚才安装的JDK目录,例如个人/usr/local/jdk1.8.0
    New Project SDK
  3. 从新打开以前Git下来的源码
    打开项目

3、火烧眉毛开始编译源码:

问题4: spring源码编译须要gradle

IDEA在帮忙下载Gradle

解决方案:本身手动下载Gradle

  1. 下载
    官方下载地址:https://gradle.org/releases
    Gradle Binary Only

  2. 解压
cd /usr/local
sudo mkdir gradle
sudo unzip -d /usr/local/gradle ~/下载/gradle-5.5-bin.zip

这里为啥要建一个gradle文件夹呢?由于开发时经常会用到多个不一样版本gradle,因此建个gradle放全部gradle文件

  1. 配置环境变量
sudo su
vi /etc/profile

Gradle环境变量
使环境变量生效

source /etc/profile
  1. 验证
gradle -v
  1. 配置IDEA GRADLE_HOME
    选择IDEA-File-Settings,打开设置,而后搜索gradle,
    选择Use local Gradle distribution,输入Gradle home:
    /usr/local/gradle/gradle-5.5
    配置IDEA-GRADLE_HOME

  2. 再次尝试编译spring源码
    能够直接点击小锤子,或者点击Build-Build Project
    再次编译Spring源码

问题5: gradle下载依赖慢

Gradle下载依赖慢

解决方案:参考这篇博客Gradle配置解决下载速度慢问题

  1. 对Gradle进行全局的设置
cd ~/.gradle/
touch init.gradle
vi init.gradle

init.gradle

  1. 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时不会卡住了。

问题6:cglib和objenesis的编译错误


报错模块:spring-core


报错示例:

你多是程序包org.springframework.cglib.core或者org.springframework.cglib.proxy中的类找不到符号
,好比org/springframework/cglib/proxy/MethodProxy.java文件报错,以下图:
cglib编译报错
也多是程序包org.springframework.objenesis中的类找不到符号,又或者是org/springframework/objenesis/SpringObjenesis.java文件报错,以下图:
Objenesis编译报错

报错缘由:

其实官方对于这个错误早有提示,只是我们一直没注意而已:
import指南

你也能够选择看这篇摘抄,也能够直接读源码中的文件
https://www.cnblogs.com/zaid/articles/11147818.html

解决方案:

  • 官方说得很简单,因而我就在IDEA的Terminal中尝试:
    RepackJar

  • 可是咱们又遇到新的问题JAVA_HOME is not set and no 'java' command could be found in your PATH.
  • 这个错误主要是说没有配置Java环境变量,那我就直接执行如下source /etc/profile

  • 又遇到一个问题,执行gradlew就开始下载gradle,参考博客:gradlew和gradle的区别,如下是我我的的解决步骤:
  1. 把以前下载的gradle-5.5-bin.zip压缩包拷贝到项目的gradle/wrapper目录下。
cp ~/下载/gradle-5.5-bin.zip gradle/wrapper
  1. 修改spring-framework/gradle/wrapper/gradle-wrapper.properties中的distributionUrl=gradle-5.5-bin.zip,以下图:

  2. 再次执行./gradlew :spring-oxm:compileTestJava(注意:大家输入是用英文:代替我这里输入的中文冒号)

问题7:AspectJ编译问题


报错模块:spring-aspects


报错示例:

报错文件org/springframework/transaction/aspectj/AspectjTransactionManagementConfiguration.java,找不到类AnnotationTransactionAspect,以下图
AspectJ报错

解决方案

  1. 下载AspectJ的最新稳定版本
    http://www.eclipse.org/aspectj/downloads.php#stable_release
    下载AspectJ

  2. 安装AspectJ
    执行命令行
cd ~/下载/
source /etc/profile
java -jar aspectj-1.9.4.jar

而后就打开了一个安装交互界面,我全点的Next,最后完成时有推荐去作的事,以下图(咱们在4.配置环境变量中完成)
AspectJ-Recommend

  1. 配置Aspectj环境变量
    如图所示
    配置Aspectj环境变量

  2. 为spring-apspect工程添加Facets属性
  • 4.1 打开File -> Project Structure..
  • 4.2 Facets新增AspectJ
    新增AspectJ

  • 4.3 选中spring-aspects_main
    选中spring-aspects_main

  • 4.4 移除Modules中spring-aspects/main下的Kotlin只留下AspectJ
    删除Kotlin

  • 4.5 更改编译器:
    搜索Java Compiler,切换Use Compiler由JavaAjc,Path to Ajc Compiler填写/home/zaid/aspectj1.9/aspectjtools.jar,选中Delegate to Javac
    更改编译器

相关文章
相关标签/搜索