目录
bug编号001:找不到或无法加载主类 com.xxx.xxxApplication
bug编号001:找不到或无法加载主类 com.xxx.xxxApplication
解决办法:
在Maven中将模块clean,然后再install。
出现这种情况的原因:可能是项目生成的target文件夹(编译后的字节码文件,程序实际在执行这些文件)里面没有你的启动类,即你的编译后的文件有所缺失
没有缺失的target目录
缺失文件的target目录
报错:
如果把targe文件夹删除再启动项目,也会报这种错误:
这个模块没有target目录,即你没有编译后的文件
这时只要在Maven中将模块clean(清除,会清除以前编译的class),然后再compile(编译)或者install(打包,因为Maven在执行一个指令的时候会执行前面的所有指令所以install也一样可以达到重新编译的效果)如下图:
这样你就有编译后的文件了:
项目也可以正常运行了
之所以你把target目录删了再启动项目后会报错,其原因还是因为IDEA启动项目时并没有去重新编译,如果IDEA启动项目重新编译了自然不会报错,以上问题都是IDEA启动项目不重新编译惹得祸,同时他还会造成bug编号002里描述的问题,解决办法就是清除IDEA的缓存如图:
之后再重启IDEA就解决了IDEA启动项目不重新编译的问题。
001和002其实可以算是同一种问题,都是编译出了问题。且引发问题的原因都是由于IDEA启动项目不重新编译引起的。当我使用maven重新编译解决001的问题后,并不知道这是IDEA启动项目不重新编译的问题只是单纯以为只是编译文件缺失导致的问题。真正原因是编译文件缺失加上IDEA启动项目不重新编译两个原因引起的。如果IDEA启动项目会重新编译,你删除的target目录文件自然会被重新编译出来。我手动使用maven解决了001缺失编译文件的问题,却没有解决IDEA启动项目不重新编译的问题,这使我在更新代码后启动项目时引发了002问题。
bug编号002:IDEA启动项目不重新编译问题
当你在idea中编写的代码,启动项目却没有生效,那你可能遇到了IDEA启动项目没有重新编译的问题,你启动的还是你上次编译的内容,所以写的代码自然无法生效。
比如今天我写了一个接口,如图:
当我想使用swagger去测试的时候,swagger界面却根本没有我这个接口,起初以为时swagger出了问题,改用postman来测试接口,结果就是404,IDEA查看日志提示为:No mapping for POST /admin/employee/status/0,在检查求情参数和路径后,确认确实有这个接口,但是IDEA却并没有找到,再联想swagger也找不到这个接口后,猜测原因为:启动的项目并没有重新编译,即我启动的还是上次编译的内容,在上次编译的内容中自然没有我新写的接口。使用swagger界面自然也不会有这个接口。既然知道问题了,那就只需要重新编译一下项目就可以了,我使用maven的clean和compile命令重新编译项目,启动后果然问题解决了
但是有一个问题就是,当我们以后继续更新代码时IDEA也并不会重新编译,如果我们每次写代码都得自己手动去编译更新那未免太麻烦了,所以这就需要解决IDEA启动项目不重新编译的问题的问题,解决办法就是就采用了清理缓存和索引,然后重启idea,就能解决了如图:
重启后IDEA在启动项目的时候就会重新编译了
总结:001本质是:编译文件缺失或没有
002本质是:启动项目没有重新编译,运行的编译文件还是原来的,即编译文件和Java代 码不一致的问题
相同点:都是编译文件的问题,并且都是IDEA启动项目不重新编译的导致的
不同的:001是编译文件缺失,002是编译文件和Java代码不一致
事件:又出现了因为编译问题而发生bug,事件如下
有一个模块是有现成的代码的,如下
复制到项目里
启动的时候IDEA提示没有这个接口,同时Swagger也没有任何一个新接口出现(我复制的这些代码里面有6个接口),这个问题简直和上次一模一样,所以我直接选择了使用maven手动编译,然后运行,问题解决。以为又是IDEA启动项目不重新编译的问题,所以我测试了一下,把这些接口里面的一个接口注释掉,再启动项目后去Sawagger里面去查看,看看这个接口有没有消失,如果没有消失则说明没有重新编译,结果出乎意料的的是消失了。也就是说启动项目的是后IDEA是有重新编译的。这时候疑惑将来了,为什么我刚复制这些代码到项目的时候启动项目,IDEA没有重新编译呢。(暂时没有找到答案,记录一下事情发生经过)
bug编号003:两个接口请求路径相同
在编写接口时由于两个接口的请求路径都是/admin/employee,一个时post请求,一个是put请求
但是编写时不注意把两个接口都写成了post如图:
这导致这两个接口请求路径和请求方式都重复了导致报以下错误:在阅读报错后,查看代码得知是两个接口请求重复导致,把editEmployee请求的方式改成put,两个请求就区分开来了,如图:
总结:低级的拼写错误,新手容易出现,以后不要再犯