maven

image-20200219145245621.png

類路徑(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)容詳解

image-20200215222144343.png
<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中

  1. <scope>compile</scope>

    • 在main和test中都可見
  2. <scope>test</scope>

    • 只有在test相關(guān)的代碼中,才能看到這個(gè)庫
  3. <scope>provided</scope>

    • 只在編譯main代碼的時(shí)候有效,運(yùn)行的時(shí)候沒有效果

包沖突

classpath中不能出現(xiàn)兩個(gè)同名的包


image-20200218205759318.png
  1. AbstractMethodError

  2. NoClassDefFoundError

  3. ClassNotFoundException

  4. 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)解決:

  1. 手動(dòng)增加dependency

    • 查看maven干掉了什么版本的包文件mvn dependency:tree

    • 然后去github查看是高版本的什么方法沒有被引用

    • 然后直接將沖突的c包,放到dependency標(biāo)簽中,引入你自己要的版本

  2. 增加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)入上面的兩種處理手段
  1. idea-->plugins-->maven helper
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、什么是 Maven? Maven 是一個(gè)項(xiàng)目管理工具,它的本質(zhì)是一個(gè)項(xiàng)目對(duì)象模型(POM),體現(xiàn)在配置中就是我...
    JavaFish閱讀 538評(píng)論 0 4
  • Maven的基本了解 什么是Maven? Maven就是Apache下的一個(gè)開源項(xiàng)目。它是用純java開發(fā)的。是一...
    Bcome閱讀 3,144評(píng)論 0 7
  • 一、maven的兩個(gè)作用 項(xiàng)目自動(dòng)化構(gòu)建,通過命令行就可以完成整個(gè)項(xiàng)目構(gòu)建過程,不需要我們手動(dòng)地進(jìn)行項(xiàng)目構(gòu)建 管理...
    lifeline張閱讀 915評(píng)論 0 1
  • 6月,濛濛的雨,碎碎的花,時(shí)時(shí)露出的陽光笑臉,攜手去曠野,山青水秀,放聲高歌,盡情暢飲,歡快舞蹈,唱出自由,舞出自...
    歐陽玉倩閱讀 298評(píng)論 0 0
  • 出國留學(xué)之前,我本來在一個(gè)南方不算小的民營企業(yè)工作,當(dāng)工程師,做產(chǎn)品開發(fā)。從本科畢業(yè)到離職,一共干了四年。因?yàn)槭敲?..
    北朐之西閱讀 684評(píng)論 0 0

友情鏈接更多精彩內(nèi)容