maven

Maven( ['me?vn])

介紹

? 首先要了解,maven 是項(xiàng)目管理工具,主要用于管理我們的 jar 包,通過優(yōu)化我們的 pom.xml 可以很好的優(yōu)化我們的項(xiàng)目。

? 當(dāng)然除了 maven 之外,項(xiàng)目管理工具還有 ant 、 gradle 等 ,gradle 依賴配置更為簡潔,這是 gradle 最大的優(yōu)點(diǎn),他吸取了 ant 和 maven 的優(yōu)點(diǎn),采用 Groovy 代碼進(jìn)行配置,如果說 maven 是 convention over configuration ,那么 gradle 就是在自己定規(guī)則。

基礎(chǔ)

  • 安裝配置

  • settings.xml (常用配置)

    lcoalRepository     # 本地倉庫
    offline             # 離線
    proxies/proxy       # 代理
    servers/server      # 服務(wù)器
    mirrors/mirror      # 鏡像
    profiles/prfile     # 'ticket' 
    activeProfiles/activeProfile    # 通過與 profiles 進(jìn)行配置進(jìn)行工作區(qū)的切換
    
  • convention over configuration 有沒有一個(gè) pom 的標(biāo)準(zhǔn)呢,或者說是一個(gè)超級(jí) pom

    maven-model-builder-xxx.jar/org/apache/maven/model

  • pom.xml (常用配置)

    modelVersion            # pom文件的模型版本,參考超級(jí) pom
    groupId                 # 組Id,一般是網(wǎng)站的逆序
    artifactId              # 功能命名
    version                 # 版本號(hào),snapshot final....
    packaging               # 默認(rèn)為 jar,在進(jìn)行復(fù)合工程的創(chuàng)建的時(shí)候,需要改為 pom
    name                    # 名稱
    modules                 # 字母塊,此時(shí)應(yīng)該是最外層的 pom
    properties              # 配置信息
    dependencyManagement    # 通過此配置可以有效的管理聚合項(xiàng)目的引用 jar 包的版本
    dependency              # jar 包依賴
    
  • dependency

    scope(生命周期)

    1. compile 編譯,不寫默認(rèn)compile
    2. test 測(cè)試,在編譯和打包的時(shí)候,不會(huì)依賴進(jìn)去
    3. provided 在編譯和測(cè)試階段都有效,但是最后打包不會(huì)加入進(jìn)去。servlet-api 就不需要在進(jìn)行引入
    4. runtime 運(yùn)行,在運(yùn)行的時(shí)候需要依賴,編譯的時(shí)候不依賴。
    5. system 本地,編譯的時(shí)候,依賴本地包
  • jar 包的依賴傳遞,好的項(xiàng)目,一定要盡量的降低 jar 包的冗余度

`mvn dependency:tree > log.txt`
  • exclusions

    過濾掉干擾的 jar ,避免應(yīng)用沖突

定義

  • lifecycle 生命周期

    分為三大類 clean default site,具體又會(huì)有下面這些小類,黑色為核心 default 分類

    • clean
    • validate
    • compile
    • test
    • package
    • verify
    • install
    • site
    • deploy
  • phase 任務(wù)單元

    一個(gè)聲明周期可以分解為多個(gè)任務(wù)單元,即多個(gè) phase,他們是按順序進(jìn)行執(zhí)行的。

    如:

    clean 拆分為

    pre-clean : 一些執(zhí)行 clean 前的操作

    clean : 執(zhí)行 clean 操作

    post-clean : 執(zhí)行 clean 操作之后需要立馬進(jìn)行的操作

  • goal 執(zhí)行任務(wù)的最小單元

    一個(gè) phase 對(duì)應(yīng)到多個(gè) goal ,這些goal 也是按順序進(jìn)行執(zhí)行的。

  • 版本

    我們熟知的版本后綴名:snapshot、release等

    snapshot 結(jié)尾的是測(cè)試版本,release 為發(fā)布版本,一般以 release 結(jié)尾的 jar 包不能自動(dòng)更新,必須升級(jí)版本號(hào)。谷歌一些 jar 包也喜歡以 final 進(jìn)行后綴,這個(gè)可以自己進(jìn)行定義,不離譜就好。

  • 常用的命令:

    clean                   # 清理target
    compile                 # 編譯項(xiàng)目
    test                    # 執(zhí)行測(cè)試用例
    package                 # 進(jìn)行打包
    install                 # 安裝到本地
    deploy                  # 發(fā)布到遠(yuǎn)程倉庫       需要在 pom 中配置 distributionManagement 并在settings.xml 中配置 server
    
    常用的指令:
    mvn clean install -Dmaven.test.skip=true
    高級(jí)特性:多線程打包
    mvn -T 4 clean install
    mvn -T 1C clean install
    
    

常用插件

  • versions 進(jìn)行版本統(tǒng)一管理

    <dependency>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>2.5</version>
    </dependency>
    
  • findbugs 檢查代碼質(zhì)量

    <dependency>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>3.0.5</version>
    </dependency>
    

高級(jí)

  • 手寫Mojo

    操作步驟

    • 修改 pom 配置
    <!-- 打包方式修改為 maven-plugin -->  
    <packaging>maven-plugin</packaging> 
    
    <!-- 引入需要依賴的 jar 包 -->
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-plugin-api</artifactId>
        <version>${maven.plugin.api.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.plugin-tools</groupId>
        <artifactId>maven-plugin-annotations</artifactId>
        <version>${maven.plugin.annotations.version}</version>
        <scope>provided</scope>
    </dependency>
    

    ?

    • 編寫自定義 plugin 類
    1. 繼承 AbstractMojo
    2. @Parameter 標(biāo)注參數(shù)
    3. execute()中用getLog()方法打印出插件運(yùn)行日志及結(jié)果
    • 編譯打包 mvn install
    • 引入使用

    ?

  • 自定義腳手架

    • 新建 maven 聚合工程,lan-base lan-web lan-service lan-consumer....

    • 工程根目錄下依次執(zhí)行

      1. mvn archetype:create-from-project
      2. cd target/generated-sources/archetype
      3. mvn install

      自定義腳手架就已經(jīng)加到了 maven 倉庫中了,可以在 maven 倉庫中進(jìn)行查看

      可以查看倉庫中目錄中的 maven-metadata-local.xml 文件,在 ide 中進(jìn)行引入。

      手動(dòng)從 archetype 創(chuàng)建項(xiàng)目

      mvn archetype:generate -DarchetypeCatelog=local

      ?

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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