當程序員真難,又一次被編輯器坑了!
來看看你中過這招么?
大家好,我是魚皮。
最近工作比較忙碌,做完技術選型后,這兩周開始上手開發(fā)了。首先是用 Java 數(shù)據(jù)訪問框架對接 PgSQL,本來以為至多半個小時就能搞定了,結(jié)果沒想到,我竟然被編輯器給坑了!耽誤了好一會兒。

把被坑的經(jīng)歷分享出來,希望大家引以為戒。
踩坑
我選用的是 MyBatis 框架,來實現(xiàn)在 Java 中操作 PgSQL 數(shù)據(jù)庫。
該框架需要讀取 xml 配置文件來實現(xiàn)對象關系映射,看了一下項目目錄,驚喜地發(fā)現(xiàn)之前有同事已經(jīng)接入了 MyBatis,并且寫好了一份配置文件。
已有配置文件如下:

既然有現(xiàn)成的,那我只需要有樣學樣,復制粘貼即可。于是,遵循同事取包名的風格,我新建了一個目錄:

然后把配置文件復制過去,略作修改即可,當前目錄如下:

搞定配置文件后,就可以試著讀取它,連接下數(shù)據(jù)庫。再次驚喜地發(fā)現(xiàn)同事已經(jīng)編寫好了一個測試類,代碼如下:
public?static?void?main(String[]?args)?{
??DatabaseClient?pg?=?new?DatabaseClient(
????//?數(shù)據(jù)庫屬性文件
??"db.properties",
????//?編寫的配置文件
??"aaa/config/sql-map-config.xml"
??);
}
之前的同事測試的是 aaa/config
配置文件,那我只需要把 aaa
改成 bbb
,不就可以連接成功了么?
運行!
嘔豁,報錯了,說是找不到文件?

奇怪了,文件明明存在???大家來幫忙找找茬,到底是哪里出現(xiàn)了問題呢?
排坑
下面來排排坑吧,首先我研究了一會兒 aaa
和 bbb
目錄下配置文件的差異,結(jié)果完全找不出問題。
好吧,是我傻了,出了 bug 要從報錯信息查起。既然說找不到文件,那就看一下構(gòu)建目錄中配置文件是否有被打包進去。
這一看,果然查出問題了,構(gòu)建目錄如下:

大家發(fā)現(xiàn)了差異了么,aaa/config
是兩個獨立的目錄,對應兩個 Java 的包;而 bbb.config
根本就是一個目錄,只不過目錄名稱中正好出現(xiàn)了包名的點分隔符!

所以 bbb.config
的配置文件路徑應該是 bbb.config/sql-map-config.xml
,而不是 bbb/config/sql-map-config.xml
!
唉,原來是中了開發(fā)工具的 “障眼法”,在 JetBrains 全家桶中,有一個視圖設置,當包中沒有文件時,會對中間包進行折疊。

所以最初我建目錄的時候,就應該先建立 bbb
目錄,再在 bbb
下建立 config
目錄,形成嵌套包,而不是直接建了一個名稱為 bbb.config
的目錄。
這個微小的差別如果不進入構(gòu)建目錄,是根本發(fā)現(xiàn)不了的。

雖然這個問題歸根到底是由自己的粗心導致的,但也值得記錄下來,防止以后遇到類似的錯誤。
就是這樣,希望大家以后在使用編輯器的時候多個心眼兒,不要完全相信它!
