Java的包管理機(jī)制
1. 什么是包
- JVM的工作被設(shè)計(jì)得相當(dāng)簡單:
1.執(zhí)行一個(gè)類的字節(jié)碼
2.假如這個(gè)過程中碰到了新的類,加載他 - 那么去哪里加載他呢?
2. 類路徑(Classpath)
- 什么是類路徑:-classpath/-cp
- 類的全限定類名(目錄層級(jí))唯一確定了一個(gè)類
- 包就是把許多類放在一起打的壓縮包
3. Classpath hell
- 傳遞性依賴是指你依賴的類還依賴了別的類
- 全限定類名是類的唯一標(biāo)識(shí)
- 當(dāng)多個(gè)同名類同時(shí)出現(xiàn)在Classpath中,就是噩夢(mèng)的開始
4. 什么是包管理
- 你要使用一些第三方類,就要告訴JVM從哪里找
- 包管理的實(shí)質(zhì)就是告訴JVM如何找到所需的第三方庫以及成功地解決其中地沖突問題
5. Maven——?jiǎng)潟r(shí)代的包管理工具
- 約定優(yōu)于配置(Convention over configuration)
- 必須強(qiáng)調(diào),Maven遠(yuǎn)遠(yuǎn)不止是包管理工具
- Maven的包按照約定為所有的包編號(hào),方便檢索,groupId/artifactId/version
- 依賴沖突的解決原則:最近的勝出
- 當(dāng)你看到如下異常的時(shí)候:
1.AbstractMethodError
2.NoClassDefFoundError
3.ClassNotFoundException
4.LinkageError - 一般就是包沖突了,解決方法:
1.單獨(dú)聲明需要引用的特定包
2.排除掉沖突的包