由idea配置spring boot导致的奇葩问题牵扯出的一系列东西

今天,或者说这几天,我从经典的web servlet开发转到尝试spring boot开发,但是一直无法解析spring-boot包等,直接添加相应jar包又有新的报错,一个比一个难解决。

最后的解决:其实是idea的问题,直接使用maven来build、使用maven的spring-boot插件来run,就是ok的。据谷歌说是idea生成自己的.iml文件时冲突。

 

 

详情如下。

 

0、初始条件——idea ultimate 学生**版一个,身经百战从不出错的jdk8,没有手动安装maven。

1、idea打开spring boot initializr,建了一个项目,成功出来一个项目,在按下idea的build前没有报错。

2、按下idea的build,显示@SpringBootApplication无法解析,spring-boot和spring-boot-autoconfigure包不存在等等问题。

 

查找百度和谷歌,中文和英文,博客、论坛和官方文档,所有的解决方案不外乎:

1、删掉maven仓库,重新install,reimport等等,本质说maven下载的东西错了。现在解决了所有问题后看来,这个情况出现其实很小。

2、打开idea的invalidate cache and restart等等,本质说idea有简单的小错误。没有用。

3、设置jdk,检查项目project structure的dependency和library,看看缺的东西,加上。没有用。

 

 

事情的转机

在尝试以上方法全部无效后,我手动安装了maven,了解了maven是什么东西,大概就是一个命令行程序,能够很好的完成java项目开发的管理,最基本的就是管理项目的模块和模块们的依赖。

之后做了这几件事:

1、仔细检查idea的project structure和project setting,看看maven的仓库内容是不是真的加入到了project structure的library和module的dependency里面。是的,加了,确认,真的不是这里的问题。但是idea中运行还是报错,表示spring-boot等包不存在。即便是我在pom.xml手动加入相关库,依旧没有用。

2、maven的clean、install什么的倒一直没错。于是,深入学习maven工具,发现maven本身(虽然是基于maven的各种插件)就可以compile、build整个项目,于是使用idea的maven插件来绕过idea的编译环境直接使用maven构建项目。没有报错,使用maven的运行(plugins,spring-boot,spring-boot:run)——

由idea配置spring boot导致的奇葩问题牵扯出的一系列东西

——成功。打开localhost:8080也接受访问(停止运行后,localhost8080为“网页无法运作”),不过显示的主页whitelabel error page,于是我觉得应该是离成功差一步了。

3、祭出google,搜索“localhost 8080 whitelabel error page”,而不是“spring boot whitelabel error page”,得到结果:没有出错,你没有在主页写东西就只能看到这个。于是你照着网上的教程,在main函数的那个类里加点东西(),用maven运行项目,看到了你的主页。

 

 

总结:

1、报错xx包不存在,xx无法引用这类很是简单的问题,解决方法其实我都知道,但为什么半天解决不了,就是我以为spring boot是由这个库里的什么property之类的resources调用了复杂的spring库,是什么神奇的东西,所以出错了是spring boot的问题,要关系spring boot的运行流程的,不是简简单单就可以解决的。

然而这大错特错,大部分常见报错就是简单问题,比如手动检查项目依赖就可以了。虽然idea的项目依赖配置文件.iml和maven的pom.xml有所不同,但显然pom.xml更大,而project structure更直接。

2、于是检查project structure的module的dependency,绝对没错,于是就要考虑内容库是不是出错了,这次的情况就是重下还错。

3、库被加进来了,库自己也没错,谁错了?编译器不可能错的,太底层了,于是就是idea错了。怎么错的?可能调用maven错了,可能调用java的编译器javac错了。怎么办?绕过idea,直接使用maven来构建吧,进入底层。