问题发现
前几天在使用idea开发maven多模块项目的时候,偶然间遇到了这个问题,报错的类对应的jar包已经被加载到了IDE,相关依赖也都已经被下载到了本地仓库。可是使用IDE编译项目的时候,报了找不到程序包/找不到符号类似的错误,使用maven命令却可以正确编译。
初步解决
由于当时时间紧,直接问了下度娘。大致结果如下:
- 包没引入或其他缓存问题
- 编码问题(参考:https://www.jianshu.com/p/ddb3c3598631)
- mvn命令mvn idea:idea(参考:https://blog.****.net/Aqibk/article/details/82906735)
包没引入或其他缓存问题
可能因为一些操作没有被IDE监控到,又或者已经编译生成的文件阻碍了后续生成操作,所以我们可以手动的去做一些事情来避免这个问题。
Reimport重新导入maven依赖
Rebuild Module重新生成项目
编码问题
这个问题虽然是小问题,还是决定拿出来啰嗦一下。建议各位更换了IDE或者电脑一定要先按自己习惯把一些基本配置改掉。
执行mvn命令
mvn idea:idea这个命令解了我的燃眉之急。
后来搜了一下,此命令大概功能就是继续下载未下载完整的依赖。不过这里有个小问题,web项目会被这个命令打乱配置,具体是把资源文件夹更改成了普通文件夹,最终还是导致了启动不了。不过spring-boot倒是可以正常编译启动了。
-----------------------------------------------------------我是分割线----------------------------------------------------------------
这两天闲下来之后具体分析解决了一下,这里记录分享一下解决过程。
问题分析
- 首先项目是多模块,而且模块之前依赖的耦合度高,难道是以来冲突导致的?
- 报找不到程序包的类使用@Data注解,难道是这个影响的?
- 模块A和模块B都有相同的文件路径,莫非是编译到一起的时候覆盖了?
- IDE配置或者仓库配置问题
排除问题
首先项目是多模块,而且模块之前依赖的耦合度高,难道是以来冲突导致的?
说干就干,找到了报错的那个模块A,新建了一个新的模块来依赖B,编译还是程序包找不到。然后就去pom文件排除冲突的依赖包,结果还是同样的问题。
报找不到程序包的类使用@Data注解,难道是这个影响的?
找到了模块A报错的那个类,去掉了@Data注解,重新生成发布到本地仓库。模块B重新引入模块A的依赖,依然未解决。
这里也可以参考解决 lombok 在 idea 的 SpringBoot 项目中 “找不到符号”
模块A和模块B都有相同的文件路径,莫非是编译到一起的时候覆盖了?
这个后来排除掉了,就算覆盖也要有相同的类才会覆盖。
IDE配置或者仓库配置问题
苦思无果呀,就还是上手试,从源头开始。
模块A删除了之前生成的文件和idea配置文件,然后重新导入项目。
忽略上图的eclipse配置文件,当时一度转回了使用eclipse开发。总之就是删除你项目文件外的IDE配置文件。
注意:我这里重新导入项目之后在idea配置里面把maven本地仓库覆盖了,换了一个新的文件夹
重新下载依赖。
然后生成,发现有一处错误,也是找不到程序包。
找到报错对应的依赖移除,之后重新导入依赖Reimport
然后删除target文件夹,重新编译Rebuild,发现OK了
再使用mvn生命周期clean install一下,把模块A发布到本地仓库
之后回到模块B,重复模块A的操作,记住一定先保证依赖模块没有问题
重新导入项目,切换了本地仓库,重新导入了模块A,神奇的发现编译成功了。
总结
删除之前生成的文件和idea配置文件,然后重新导入项目
删除之前的本地仓库或者切换一个新仓库
找到报错对应的依赖移除,之后重新导入依赖,重新编译Rebuild(单模块到此结束)
mvn clean install,发布到本地仓库
下级模块重复以上操作
以上,如果有不对的,还望各位同道指出,侵删,转载注明出处。