一、场景
之前一直在开发一个后台模块,已经很久没有从零开始新打造一个工程了,最近需要做一个多服务模板,于是开始重新捣腾maven工程,居然遇到了一些困扰。
二、经过
由于之前一直是使用别人构建好的骨架工程,于是此次也还是拷贝了一个工程,然后修改工程名称等处,在弄完之后发现运行的时候总是报各种错误,不是JDK没设置,就是找不到启动类之类的,在网上查了一通,发现还是工程结构改的不彻底,大底都是改的如下信息:
但是即便改了这些,有时候又莫名其妙地还是报错,似乎还有其他地方的缓存会将其还原回来,但是没有找到,最后还是通过导入已经存在的工程,选择maven工程格式:
这种方式来打开已经存在的工程似乎要靠谱一点。
工程是改造打开了,接下来就是基本配置开发结构搭建了,按照现有的框架,做好pom.xml 依赖引用, 在yml 中配置好数据库,然后构建controller service entity mapper 目录结构,启动application 服务即可,然而就是在此时启动后遇到了问题:
看问题报错原因应该是在注入mybatis 接口实例时找到了两个,不知道用哪个。当时就感觉一头雾水,从其他工程拷贝过来的,同样的pom.xml引用,为何其他工程正常运行,这个看起来是引用的模块之间的问题,然后就各种查询,不得其果。
三、另起炉灶
在辗转查询无果后,心生一念,何不脱离框架,自己单独写个存粹的demo, 于是直接用idea 新建工程。
生成工程, 然后做好配置,同样创建好目录结构。
启动类中注入扫码路径
如此操作之后,启动依然报找不到找不到mapper对应的实现:
又搜索一番,发现需要将mapper 目录放到到resources 目录下才能生效有用,原来是因为yml中配置的是在classpath 下查找:
mybatis-plus: mapper-locations: classpath:mapper/*.xml # 配置mapper.xml路径 check-config-location: true # 检查xml文件是否存在 configuration: map-underscore-to-camel-case: true # 开启驼峰命名法 type-aliases-package: org.example.entity # 实体类存放位置
关于这个classpath 到底是什么,查了一下如下: 也就是target 里面这个:
最终一个简单的maven+mybatis 才算调通,通过这个我隐隐发现之前使用框架搭建的工程,我似乎是在启动类中少了@MapperScan 这个注解,导致无法找到实例Mapper, 后台加上后,果然之前那个引用两个jar的 baseMapper 冲突的问题也没有了,不过还是不知道是什么原因,也就是解决了之前以为拷贝过去的工程配置都已经完全一样了,为何demo运行不了的问题。百密一疏,Application类是自己新建的...
四、花絮
另外这次的调试,也发现了在idea工程中引用maven仓库依赖的一些问题,有时候总是更新不下来,这个时候多半有 lastUpdated 文件在作怪,需要删除。有时候引用下来了,但是idea 老是加载不到,这个时候,可以 invalidat cache restart IDEA, 还不生效,有一个命令 : mvn -U idea:idea
这个似乎可以强制更新下来。
2024-11-27
最近又遇到一个idea 更新maven 仓库到本地的问题,这次是文件明明已经更新到本地目录了,但是idea 就是无法识别到:
已经用过所有方式,包括删除本地maven目录,强制mvn 更新命令,始终不行,而其他同事可以正常运行同样的工程。
最后怀疑还是idea 中对于工程的文件路径记录有问题,windows 系统下,有xxx.iml 文件, Mac 下面没有找到,但是我试了将.idea 目录删除之后依然无效。
最后的最后是重新 下载了一份仓库代码,在一个新的目录下,用idea 重新打开工程,才解决这个问题。。。。。
总之,这次又是一次翻来覆去的折腾,最后总算理清了一点,苟日新,日日新。