乐趣区

spring-boot源码编译踩坑记

在 Github 上下载了 Spring Boot 的源码后,折腾了我几天才终于把这货给编译成功,并成功 build 出 IDEA 的 project 出来了,官方埋坑真的是天理不容啊。

我下载的是 spring boot 2.1.8,下载后照着网上的文章执行指令:mvnw clean install -DskipTests -Pfast 然后就是半天动都不动,也不知道发生了什么。后面我就加多了个 debug 日志输出, 还是什么都没有输出。。。

搜了一下 mvnw,原来这家伙全名 maven wrapper,它的原理是在 maven-wrapper.properties 文件中记录你要使用的 maven 版本,当用户执行 mvnw clean 命令时,发现当前用户的 maven 版本和期望的版本不一致,那么就下载期望的版本,然后用期望的版本来执行 mvn 命令。也就是这个东西有两个作用,一个是不需要你事先安装 maven,一个是保证你 build 的时候使用的 maven 保持一致。

后来看到这篇文章《学 Spring Boot 不能装! ???? 不装 Maven、Database、Tomcat 才是正常开发模式》,原来 mvnw 第一次运行会检测 $USER_HOME/.m2/wrapper/dists 目录下是否有 maven-wrapper.properties 中指定的 Maven 版本,如果没有就自动下载。比如我用的 windows,就在目录 C:\Users\shahuwang\.m2\wrapper\dists 里有一个 apache-maven-3.5.4-bin(刚才执行 mvnw 时生成的),继续打开,来到目录C:\Users\shahuwang\.m2\wrapper\dists\apache-maven-3.5.4-bin\4lcg54ki11c6mp435njk296gm5 然后在里面看到下载了部分的 maven。

mvn 那样下载的方式特别特别慢,所以我直接用浏览器下载对应版本的 maven,https://archive.apache.org/di… 3.5.4-bin.zip,然后放到 C:\Users\shahuwang\.m2\wrapper\dists\apache-maven-3.5.4-bin\4lcg54ki11c6mp435njk296gm5 里即解决问题。注意一定要版本一致,且为 zip 包。

另外,要注意修改 C:\Users\shahuwang\.m2 下 maven 的 setting.xml, 把官方源修改为阿里云的源,不然会慢到死的。

搞定后,继续执行mvnw clean install -DskipTests -Pfast,中间发现有几次 failed,都是继续再执行命令就解决了,看起来应该是网络连接中断的问题,之前网上一直找也没找到解决方案,没想到就是 build 多几次就解决了。

后面又遇到一个格式化的问题,mvnw spring-javaformat:apply 这个命令就解决了。

最后执行 mvnw idea:idea 创建 IDEA 项目。

然后就遇到了 checkstyle 的问题,spring boot 定义了一个 nohttp 的规则,不能用 http 域名,除非在白名单里面。但是呢,它自己的文档里 apache.org 这个域名用了 http,又没有放到白名单里,然后一直编译都通过不了,只是告诉我违反了规则,又没有告诉我哪里错了。最后,终于搞清楚 checkstyle 的输出,是放在主目录下 target/checkstyle-result.xml 里面,找到里面的 error,就知道是哪里的问题了。

最坑爹的是,上述问题我解决了之后,重新下载全新的 spring boot 工程,执行 mvnw clean install -DskipTests -Pfast 就一下子通过了,上述问题全部都没有遇到,也难怪我搜索半天也找不到解决方案了,看起来 maven 还是不太行

退出移动版