maven包加載順序和jvm類加載順序


一、mvaven jar包加載順序

Maven對版本不同的相同依賴包生效優先級:

  1. 不同依賴層級深度的遵從【最短路徑優先】原則。

  2. 具有相同依賴層級深度的遵從pom中【最先聲明優先】原則。

二、JVM類加載順序

相同的類指:類的全限定名一樣
問題:怎么優先加載自己寫的類

  1. 解析:

    class文件所在位置, 直接在classpath下,在jar包中:

  • a.相同的類, 一個在web-inf/classes目錄下, 一個在jar包中: 此時優先加載classes目錄下的class文件。
  • b.相同的類, 都在jar包中:此時按照jar的裝載順序, 簡單的如果沒有其他的特殊處理, 就按照jar包的名字排序。 如先加載aa.jar中的文件,再加載bb.jar中的文件。
  1. 結論
  • a.將.class文件放在classes文件夾下
  • b.如果所有的class被打包為jar,就修改jar包的名字,保證先加載自己的jar包。

maven的加載類的機制也是文中b類結論,而不是很多博客中說的pom聲明順序,pom聲明順序可能只能保證jar包加載順序,而class加載順序通過聲明順序解決不了。

值得說的是,maven打成的jar包名稱是以artifactId決定的,所以修改artifactId首字母就能准確的保證哪個包中的同名class先被加載了。

jvm類加載中的父類委派機制,解決的是重復加載問題,而不是類加載的順序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM