intellij导入spring源码遇到的问题总结

背景

spring源码是很好的学习资源,将其导入ide中可以方便地看源码细节、java doc、参考其单元测试、用中文记录注释自己所看心得。
自己在导入源码的过程中遇到很多问题,将其记下,方便以后查询。

问题列表

gradle

1、gradle报不是git目录。
解决办法:尝试过git clone下来再.\gradlew.bat :spring-oxm:compileTestJava,但发现不行。参照文章1老老实实改成4.4.1的gradle,不报这个错了。
2、又报另一个啥带spring字眼的错。参照文章在源码的build.gradle的2repositories里加入maven { url “http://repo.springsource.org/plugins-release” },编译成功。
说明:反斜杠及bat是自己加上的,因为有看过不知哪篇是这样的,考虑到windows路径是反斜杠,windows不像linux一样无须后缀即可知道文件格式,于是自己加上了bat后缀。
另:gradle配置阿里云镜像源,这里不多说。对于不会科学上网的同学,这是必备。

intellij

导入后build了1个小时没报啥错,项目也都出来了。于是在该工程再创建一个module准备运行一下以验证是否真OK。发现新module写代码时,代码所需依赖始终无法导入,写代码无法自动联想补全,怀疑是intellij版本问题。因为我用的19.2的版本创建新gradle模块时根本没有gradle配置这一页,无法选择使用本地gradle、设置auto-import,每次build都重新下载gradle,也是醉了。这里附上网上找到的吐槽3
重新下载19.1,破解agent及code都用的原来的,发现注册成功。19.2我之前用的maven没觉得有啥问题,所以就保留了,现在装完算是两个intellij都有了。
19.1创建gradle工程的设置页面总算和网上文章长一样了。
jdk我装的11,有了前面这几处版本坑,也老老实实换成8了。intellij修改jdk版本有好几处,参考这篇4

测试

测试是参照参考链接1视频中来的。由于对gradle没用过,心里没底,于是参考网上文章5创建spring工程和创建spring MVC工程67
spring mvc运行后报404,按这篇设置解决8
另:mvc访问路径修改后反而访问不了,只能用原来的gradle生成的,长得有点奇怪,拼接Gradle__加组名加项目名形成的路径。

在导入spring源码生成的工程里创建自己的module,单元测试ok,需要注意单元测试要写在test包里,否则gradle testCompile引入的junit依赖在正常业务代码包里识别不了。

问题记录

  1. 给看过的源码函数加中文注释,build会报“错误: 编码GBK的不可映射字符”。在网上找了各种文章,试了,发现解决不了。这里有个博主发了一篇讨论帖9,但是还没有人回答。
    暂时的解决办法,将有中文注释的java文件设置为GBK,设置方式如下图点击编码显示处的下三角进行选择:
    intellij导入spring源码遇到的问题总结_第1张图片
    这种方法的劣势是,需要对所有注释过中文的源码文件手动设置编码。
    之所以出现中文乱码的原因,应该是我们下载的spring源码为utf-8格式,操作系统使用的是GBK编码,在build时javac会使用本地编码即GBK,其实javac是可以设置的,加-encoding UTF-8,但是我在intellij的settings-compiler处设置了发现不生效。所以就有上面提出的问题,希望得到解答,以有一个一劳永逸的方法。

  2. 遇到了javadoc相关的build错误,参照别人导入spring源码的文章说要注释掉docs.gradle的dokka和asciidoctor,照做,发现还是报错,于是在docs.gradle搜索javadoc关键点,将相关的行注释掉,注意不是整个task block块注释,因为发现这样会报xx找不到。另外,像docsZip这种依赖了我删除的dokka和asciidoctor的情况,我是把这个block先复制再注释,再粘贴将对dockka和asciidoctor字眼删除。另外gradle需要设置为非offline,因为有些依赖要从网上下载,这种错误一般也会有提示告诉你当前offline模式导致有些依赖得不到,所以仔细看build结果很重要。javadoc这块只是暂时避开,希望有机会了解一下这块为啥会出错,怎样才能build出javadoc。

  3. 上面没有列出在其他博主的文章里写过的,build之前先运行spring-oxm和spring-core的compileTest.java,以及docs.build中要对task schemaZip作修改以将针对linux路径分隔符换成针对windows路径分隔符样式。https://www.zhihu.com/question/21346206这篇文章的第一个回答者觉得框架的文档都木有看完就去看源码,有点没抓住重点,从他的分享里,能学到如何从框架官网去看和学习框架使用。不过,他说的木有必要看源码,我不是很赞同,学习需要一点发散,不用拘泥于条条框框,不过,我们确实需要多看官方文档。

  4. 运行spring-webmvc的DispatcherServletTests,退出码为0,说明源码导入木有问题了。

后记:
在跟踪EnableConfigurationProperties时想了解AnnotationMetadata的实现类,因为源码里有注解及详细代码信息,于是导入spring boot。遇到了git相关的问题,发现如果git init还是无法解决,于是git clone --branch tag git-url,然后导入intellij并build成功。
spring boot源码导入intellij,build成功后,发现还是跳转类时报cannot resolve,于是重新导入spring boot下的spring-boot-project到intellij后,build成功,可以跟踪欣赏源码了。


  1. https://blog.csdn.net/renlianggee/article/details/105575965(主要参考文章) ↩︎

  2. https://blog.csdn.net/zp357252539/article/details/80566937(gradle报另一个带spring字眼的错) ↩︎

  3. https://www.v2ex.com/t/618151(19.2的吐槽) ↩︎

  4. https://blog.csdn.net/qq_39835588/article/details/100862082(intellij修改jdk版本) ↩︎

  5. https://www.jianshu.com/p/b605d7fe073d(intellij创建gradle spring项目) ↩︎

  6. https://blog.csdn.net/code_for_fun/article/details/58605602(intellij创建gradle spring mvc项目) ↩︎

  7. https://www.jianshu.com/p/2f7649bbd2e6(intellij创建gradle spring mvc项目) ↩︎

  8. https://blog.csdn.net/YlanHds/article/details/79883300(intellij的gradle spring mvc项目报404问题) ↩︎

  9. https://blog.csdn.net/wuyujin1997/article/details/91169019 ↩︎

你可能感兴趣的:(知识记录,java,spring)