在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还是不太行