第一次部署Spring 源码进入IDEA
真的是碰壁一大堆,所以写下一个流程,供读者学习。
下载Spring 源码
观察部分文件,下载Gradle
正式部署项目
编译项目(bulid project)
测试小demo
可以在GitHub上直接选择自己喜欢的版本进行下载 点击跳转.(已经下载有的就忽略以下)
进入GitHub页面之后,左边有一个 “ Compare ”
点击选择自己想要下载的版本。
然后会进入一个新的页面,再点击新页面上的 Code
就可以看到熟悉的下载页面啦!
真的非常重要,你们碰到的很多编译失败的原因,都是因为Gradle的版本问题
我当时部署的时候,是直接去gradle官网下载的,各种报错,什么 找不到 sonarRunner 啊,什么 classesDir 出错啊各种恼怒。
我也知道是gradle版本不合适,但是换了五六个都不合适,然后百度了一大堆,最后还是自己发现了。。。。
讲了那么多,现在就开始了!
首先解压spring源码后找到这个文件
右键打开记事本打开这个文件
(当然啦,如果你已经把项目导入IDEA了,也可以在IDEA里面找到这个文件,然后打开)
然后看到最后一行,是一个链接
这个链接是一个gradle的ZIP文件,那我们此时,就可以去复制粘贴到浏览器上了,浏览器就会下载一个gradle啦(谷歌浏览器下载国外软件速度是真的快 不是广告)
PS 这个 https\: 注意删掉冒号前的斜杠,不然浏览器不认为这是一个URL。
下载好了软件了,那我们就开始安装吧,其实也就是解压,然后配置以下环境变量。也就不多叙述了,网上的教程都是正确的。
好了,此时我们就有了最必要的两个文件了(IDEA就不用说了,推荐用最新,我用的是2018.2.4,出现了一个Kotlin出错的问题,具体哪个本版可以用我也不知道,我只知道怎么解决,下面会讲解)
导入Spring 源码 (自己百度一下吧,都是非常简单的步骤了)
PS:千万不要用IDEA 的 open ,要使用import,选择源码中的bulid.gradle文件进行打开。
配置一下,不配置的话,IDEA不知道下面是什么文件
file ->setting 给项目配置gradle
选择刚刚下载的那个二步骤中下载gradle.ZIP的解压文件。
导入之后,IDEA 会自动下载相应的依赖包。外国网络,所以jar 包下载非常慢,而且会经常断掉,断开之后刷新一下gradle,就会继续下载了,多重试一下哈。
最后完成了之后呢,会显示 BUILD SUCCESSFUL
根据这三个地方判断。BUILD SUCCESSFUL 后面也不会跟着爆红。
首先,我们需要下载一个 aspectj. 我下载的是1.8.5的
点击即可安装。
安装之后给你的IDEA配置一下
然后直接 编译整个项目 bulid project,如果没有报错,那么恭喜你,下面这些你全部可以不用看了。直接到达 小demo 步骤。
PS: 其实按原理来讲,ajc 是可以编译java文件的,但是呢,奇怪的是我的项目中有一个方法(ConvertingComparator),ajc编译不通过,只有javac可以。
暂时没有编译成功的同学们,不要着急。
对 spring-aspects文件夹中的main文件夹进行单独编译。(javac编译不了,所以改成 Ajc 去编译,也就是上图修改的原因)
这个编译成功了,里面会有新的文件产生(IDEA转圈转完了。但是可能没更新那么快,稍微等个几秒,还没有的话,就删掉这个空的classes文件夹,重新编译这个main 文件夹),claesse文件夹出来新文件之后,我们可以直接用编译。看看能否成功。
如果报错了 ,而且报错是关于ConvertingComparator 这个类的,那么你就看接下来的步骤,否则就酌情忽略下面步骤。
我们需要给他进行隔离(还有另一种隔离的方法,推荐另一种,自行百度)。鼠标右键spring-aspects文件夹,选择点击 load/…
下面这一步 中的2步骤 会提示你是否选择全部还是选择已选中的 moudle。
选择 中间的选项 也就是只选择 已选中的
你会发现这个文件夹颜色和其他的不一样了。
现在我们需要把刚刚设置的 Ajc 改回来成javac。以便编译后面剩下的文件。
直接bulid project 就可以啦。
导入需要用到的源码依赖。(全部导入,省时省力)
AppConfig.java (不放代码,多写写!!就几行,别偷懒)
Test.java
其实是我偷懒。。。。
接下来呢
直接运行,是会报错的,反正我报错了。看下面避坑中的第三点。
1、
错误信息:Can’t find bundle for base name misc.registry, locale zh_CN
解决:重启IDEA
2、
错误信息:Can’t find resource for bundle java.util.PropertyResourceBundle, key kotlin.gradle.
原因:IDEA的问题,也就是第二步提到的,推荐使用最新IDEA。当然啦,我也不知道哪个版本可以。
我的解决方法:打开IDEA的安装路径。依次打开 lib 文件夹,找到 util.jar ,然后右键解压到 tmp 文件夹下(tmp是自己键的,什么文件夹名随意)。解压之后找到并右键打开这个文件
在文件最顶端加上这串代码
kotlin.gradle.testing.enabled=false
保存
此时需要把这个文件重新编译成util.jar 包并将lib下的 util.jar替换掉。
重编jar包教程:
在需要打包的文件夹中,按住shift+鼠标邮件,点击在此处运行命令窗口(win10是PowerShell)
输入jar cvf xxx.jar *
xxx.jar是你要打包成的jar的名称,后边*号之间有空格
3、运行我们的新建的小 demo 时报错
提示我们java.lang.NoClassDefFoundError:org/springframework/cglib/core/NamingPolicy
解决:将spring core 中的 build/lib的spring-cglib-repack-3.3.0.jar和spring-objenesis-repack-3.0.1.jar 引入到新增的demo模块中
好了,几千字,数十张图片,应该能解决很多人的疑惑了。
实际上我碰到的问题远远比上面的多,只是写的太累了,下次有时间我继续补充~