今天在做專案的時候遇到了一個很有意思的問題,折磨了我很長時間,不過最終還是解決了,特留此文紀念一下。
遇到的問題:
同樣一段程式碼,在同事那就好使,在我這就找不到一個方法。引用的包也都是相同的,這種問題還是第一次遇到,怎麼辦呢?
找啊找啊找原因,檢視引用的包,才發現我所引用的包名和同事引用的包名是相同的,不同的是我兩引用的包不是一個jar。也就是說不同的jar裡包含了相同的包名和類名。
問題的原因找到了,那怎麼解決呢?怎麼指定呼叫自己需要的jar中的包呢?
要解決這個問題,還得先了解jvm載入的方法。jvm在載入包的時候,是從classpath的路徑從上往下找,找到第一個後就將其引用。
包名類名都相同,那jvm沒法區分了,一般ide是會提示發生衝突而報錯的,如果不報錯的,那就只有第一個包被引入(在classpath路徑下排在前面的包),第二個包會在classloader載入類時判斷重複而忽略。
知道了jvm載入包的方法,那麼解決問題就很容易了,只需要將需要引用包的jar放在前邊就可以了,也就是說放在classpath路徑的上邊。