转载

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 这个命令就解决了。

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

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

原文  https://segmentfault.com/a/1190000020413148
正文到此结束
Loading...