今天,或者说这几天,我从经典的web servlet开发转到尝试spring boot开发,但是一直无法解析spring-boot包等,直接添加相应jar包又有新的报错,一个比一个难解决。
最后的解决:其实是idea或者jdk8的问题(2019-11-18,jdk8再2019年1月即停止免费更新)。直接重装idea是没用的,因为我用eclipse也打不开。在我把jdk8换成jdk11,再重装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)——
——成功。打开localhost:8080也接受访问(停止运行后,localhost8080为“网页无法运作”),不过显示的主页whitelabel error page,于是我觉得应该是离成功差一步了。
3、祭出google,搜索“localhost 8080 whitelabel error page”,而不是“spring boot whitelabel error page”,得到结果:没有出错,你没有在主页写东西就只能看到这个。于是你照着网上的教程,在main函数的那个类里加点东西(),用maven运行项目,看到了你的主页。
4、其实在idea的右边的maven用命令行mvn -U idea:idea更新插件,就可以在idea中正常跑出项目,但是这个maven的idea插件(不是idea的maven插件)据官网描述已停止支持,且我发现重开idea后就失效。因此选择绕过idea使用maven自行处理问题。
总结:
环境版本很重要,尤其是有长长的依赖树的时候。
大部分问题都很简单,但如果这些简单问题常见的解决方法解决不了的,那就是可能直到重装环境之前,再也解决不了了。