
類路徑(Classpath)
類可以通過jvm的classpath中找到那個(gè)類 ,jar包通過分號(hào)來區(qū)分,和環(huán)境變量一樣
包的全限定類名(目錄層級(jí))確定了唯一的類
包就是把許多類放在一起打的壓縮包
maven的歷史
沒有maven的情況
需要手動(dòng)引入jvm。在編譯的時(shí)候,引入javac -cp commons-lang3-3.9.jar StringIsBlank.java
啟蒙時(shí)代
Apache Ant
手動(dòng)下載jar包,放在一個(gè)目錄中
寫xml配置,指定編譯的源代碼目錄、依賴的jar包、輸出目錄等
缺點(diǎn)
存放jar包的名字不統(tǒng)一。為什么不規(guī)范好了
因?yàn)椴豢煽匦蕴?,所以每個(gè)人寫的xml都不盡相同
第三方類庫的下載不方便
還要檢查第三方類庫的classpath的沖突情況
Maven
-
maven不僅是包管理工具,只要準(zhǔn)守它的約定就能解決包沖突的問題
文件入口在src/main。test在src/tset
convention over configuration:約定優(yōu)于配置
它約定了一個(gè)中央倉庫,按照一定的約定儲(chǔ)存包,遠(yuǎn)程倉庫包
-
Maven的本地倉庫
- 默認(rèn)位于~/.m2
Maven的唯一坐標(biāo)
xml中的dependencies標(biāo)簽的dependence標(biāo)簽中的包內(nèi)容詳解

<dependence>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.5.0</version>
<scope>test</scope>
</dependence>
pom文件
<profile>:本地環(huán)境或者開發(fā)者環(huán)境細(xì)微的差別
<repositories>:聲明倉庫地址,方便訪問,可以用阿里的maven倉庫,可以是本地倉庫或者是遠(yuǎn)程倉庫
<scm>:source compil manage源代碼控制系統(tǒng)
<issueManagement>:提bug去哪里提
<properties>:提供類似變量的操作
<url></url>:當(dāng)前項(xiàng)目的url
<packaging>jar</packaging>:當(dāng)前項(xiàng)目最終被打包成一個(gè)jar包,或者war包,pom
當(dāng)前項(xiàng)目的坐標(biāo)
<modelVersion>4.0.0</modelVersion>maven按照生命版本規(guī)格寫的
Pom:project object model
scope在pom中
-
<scope>compile</scope>- 在main和test中都可見
-
<scope>test</scope>- 只有在test相關(guān)的代碼中,才能看到這個(gè)庫
-
<scope>provided</scope>- 只在編譯main代碼的時(shí)候有效,運(yùn)行的時(shí)候沒有效果
包沖突
classpath中不能出現(xiàn)兩個(gè)同名的包

AbstractMethodError
NoClassDefFoundError
ClassNotFoundException
LinkageError
傳遞性依賴帶來的沖突解決方案
原則:絕對(duì)不允許最終的classpath出現(xiàn)同名不同版本的jar包(這個(gè)是重點(diǎn))
-
解決原則:取最近的包,會(huì)丟棄C1.jar保留C2.jar,其實(shí)是因?yàn)閜roject-->a-->b-->c2
而另外一條路只是project-->a-->c1,可是,當(dāng)這兩個(gè)的路徑引用一樣長,就會(huì)誰在前面就用哪一個(gè)。
手動(dòng)解決:
-
手動(dòng)增加dependency
查看maven干掉了什么版本的包文件
mvn dependency:tree然后去github查看是高版本的什么方法沒有被引用
然后直接將沖突的c包,放到dependency標(biāo)簽中,引入你自己要的版本
增加exclusion
<dependency>
<exclusions>
<exclusion>
<groupId>com.github.package</groupId>
<artifactId>exclusion-class</artifactId>
</exclusion>
</exclusions>
</dependency>
- pom.xml的視圖下標(biāo)增加。dependency analyzer
- click reimport
- 就會(huì)出現(xiàn)(omitted for conflict with 0.1)
- click dependency,可以自動(dòng)在pom中導(dǎo)入上面的兩種處理手段
- idea-->plugins-->maven helper