一、mvaven jar包加載順序
Maven對版本不同的相同依賴包生效優先級:
-
不同依賴層級深度的遵從【最短路徑優先】原則。
-
具有相同依賴層級深度的遵從pom中【最先聲明優先】原則。
二、JVM類加載順序
相同的類指:類的全限定名一樣
問題:怎么優先加載自己寫的類
-
解析:
class文件所在位置, 直接在classpath下,在jar包中:
- a.相同的類, 一個在web-inf/classes目錄下, 一個在jar包中: 此時優先加載classes目錄下的class文件。
- b.相同的類, 都在jar包中:此時按照jar的裝載順序, 簡單的如果沒有其他的特殊處理, 就按照jar包的名字排序。 如先加載aa.jar中的文件,再加載bb.jar中的文件。
- 結論
- a.將.class文件放在classes文件夾下
- b.如果所有的class被打包為jar,就修改jar包的名字,保證先加載自己的jar包。
maven的加載類的機制也是文中b類結論,而不是很多博客中說的pom聲明順序,pom聲明順序可能只能保證jar包加載順序,而class加載順序通過聲明順序解決不了。
值得說的是,maven打成的jar包名稱是以artifactId決定的,所以修改artifactId首字母就能准確的保證哪個包中的同名class先被加載了。
jvm類加載中的父類委派機制,解決的是重復加載問題,而不是類加載的順序。