气炸!又一次被编辑器坑了!

程序员鱼皮

共 1509字,需浏览 4分钟

 ·

2021-04-22 06:19

来看看你中过这招么?

大家好,我是鱼皮。

最近工作比较忙碌,做完技术选型后,这两周开始上手开发了。首先是用 Java 数据访问框架对接 PgSQL,本来以为至多半个小时就能搞定了,结果没想到,我竟然被编辑器给坑了!耽误了好一会儿。

把被坑的经历分享出来,希望大家引以为戒。

踩坑

我选用的是 MyBatis 框架,来实现在 Java 中操作 PgSQL 数据库。

该框架需要读取 xml 配置文件来实现对象关系映射,看了一下项目目录,惊喜地发现之前有同事已经接入了 MyBatis,并且写好了一份配置文件。

已有配置文件如下:

既然有现成的,那我只需要有样学样,复制粘贴即可。于是,遵循同事取包名的风格,我新建了一个目录:

然后把配置文件复制过去,略作修改即可,当前目录如下:

搞定配置文件后,就可以试着读取它,连接下数据库。再次惊喜地发现同事已经编写好了一个测试类,代码如下:

public static void main(String[] args) {
  DatabaseClient pg = new DatabaseClient(
    // 数据库属性文件
  "db.properties",
    // 编写的配置文件
  "aaa/config/sql-map-config.xml"
  );
}

之前的同事测试的是 aaa/config 配置文件,那我只需要把 aaa 改成 bbb,不就可以连接成功了么?

运行!

呕豁,报错了,说是找不到文件?

奇怪了,文件明明存在啊?大家来帮忙找找茬,到底是哪里出现了问题呢?

排坑

下面来排排坑吧,首先我研究了一会儿 aaabbb 目录下配置文件的差异,结果完全找不出问题。

好吧,是我傻了,出了 bug 要从报错信息查起。既然说找不到文件,那就看一下构建目录中配置文件是否有被打包进去。

这一看,果然查出问题了,构建目录如下:

大家发现了差异了么,aaa/config 是两个独立的目录,对应两个 Java 的包;而 bbb.config 根本就是一个目录,只不过目录名称中正好出现了包名的点分隔符!

所以 bbb.config 的配置文件路径应该是 bbb.config/sql-map-config.xml,而不是 bbb/config/sql-map-config.xml

唉,原来是中了开发工具的 “障眼法”,在 JetBrains 全家桶中,有一个视图设置,当包中没有文件时,会对中间包进行折叠。

所以最初我建目录的时候,就应该先建立 bbb 目录,再在 bbb 下建立 config目录,形成嵌套包,而不是直接建了一个名称为 bbb.config 的目录。

这个微小的差别如果不进入构建目录,是根本发现不了的。

表面上看不出区别

虽然这个问题归根到底是由自己的粗心导致的,但也值得记录下来,防止以后遇到类似的错误。


就是这样,希望大家以后在使用编辑器的时候多个心眼儿,不要完全相信它!

往期推荐

我工作中不可或缺的宝贝们!

腾讯二面,我被 “赛马” 问题难住了

小知识,啥是热数据探测?

浏览 50
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报