如下图, 所有的.class都如此, 但是我又不想将近50个文件逐一手动删除main.
上网查询很长时间无果,最后还是微信请教了之前在阿里呆过的同事.
他直接给我来了个反向思维: 可能是你上一个idea版本这个模块包就有main包?加上试试吧!
于是我在文件夹的com.sky前面加了main文件夹....
解决了!从这次我从同事阿里p6那里(笑称,他没说是p几反正在阿里工作了几年)学会了运用反向思维,不强制改变已经发生的环境,而是巧妙的去添加一个包不要固化的认为代码必须跟自己想的想当然走--package 路径必须com开头, 这样能够大大提高工作的效率.
由于重装了idea, 可能是之前创建项目的时候就在com.sky下的再前面又多一个main包, 于是乎所有的.class文件的package路劲前面都多了main.
①于是我反向思维在com文件夹前面java文件夹后面又新建了一个文件夹, 成功解决所有.class包路径报红线的问题.
②但是, 启动的时候还是无法启动, 报以下问题:(看最后, 是AuthFill注解类出的问题)
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'projectingArgumentResolverBeanPostProcessor' defined in class path resource [org/springframework/data/web/config/ProjectingArgumentResolverRegistrar.class]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cache.annotation.ProxyCachingConfiguration': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error Type referred to is not an annotation type: com$sky$annotation$AutoFill
在文末提出了是注解类的问题.
我查看usage发现在一个aop切面类中代码也是报红的但是类目录不报红的地方, 在前面加上main.之后就解决了...
③紧接着启动类启动的时候出现了第三个问题:另一个模块的bean无法扫描.
我解决了好久, 尝试了各种不同的方法还是不行. 隐约觉得和刚进来旧项目的时候那个多出来的main有关系.但是即使是添加了@[ComponentScan]也不行(可能是找到的文章方法不适合我..)
但这个找不到bug的过程还是有用的! 帮助我确定方向, 我就感觉是夸包扫不到包名的问题.
中午含泪睡了一觉, 下午起床之后顺着这个方向, 百度只是换了个问法, 立刻就解决了.[https://blog.csdn.net/weixin_44632065/article/details/124862925]
原因就是该启动类的包名是main.com.sky, 另一个模块的想要的类在com.sky中(本文描述的第一个问题),这个启动类就找不到路径了.
总结:1.适时运用反向思维提高工作效率 2.跨模块启动类路径不同时需要在@SpringBootApplication后面指定两个路径(scanBasePackages = {"main.com.sky", "com.sky"})