Maven 相關(guān)概念總結(jié)

Maven 相關(guān)概念總結(jié)

構(gòu)建原理

Maven 構(gòu)建項目的規(guī)則是約定大于配置,約定指 Maven 提倡項目應(yīng)遵循標(biāo)準(zhǔn)的目錄結(jié)構(gòu)、命名規(guī)范等,以便于 Maven 幫助用戶自動化地完成項目的編譯、測試、打包等一系列工作。

Maven 對項目的生命周期進(jìn)行了規(guī)范,保證不同用戶按照統(tǒng)一的規(guī)范實現(xiàn)項目的自動化構(gòu)建。

生命周期

Maven 項目的生命周期包含三部分:Clean、Build、Site

Clean 生命周期

Clean 生命周期用于在項目正式構(gòu)建前進(jìn)行一些清理工作,包含以下階段:

  • pre-clean:執(zhí)行 clean 前需要完成的工作
  • clean:清理上次構(gòu)建生成的文件
  • post-clean:執(zhí)行 clean 后需要完成的工作

Build 生命周期

Build 生命周期用于構(gòu)建項目,是 Maven 項目的主要生命周期,共包含23個階段,主要的有:

  • validate:驗證項目正確且必要的信息可用
  • compile:編譯代碼
  • test:執(zhí)行單元測試
  • package:打包編譯后的代碼
  • verify:運行集成測試以保證項目質(zhì)量達(dá)標(biāo)
  • install:將打包后的項目安裝至本地倉庫以供其他項目使用
  • deploy:在build環(huán)境上部署項目,并將打包后的項目發(fā)送到遠(yuǎn)程倉庫

Site 生命周期

Site 生命周期用于生成項目的報告文檔、站點,包含以下階段:

  • pre-site:執(zhí)行生成站點文檔前的工作
  • site:生成站點文檔
  • post-site:執(zhí)行生成站點文檔后的工作,并未部署做準(zhǔn)備
  • site-deploy:將生成的站點文檔部署到服務(wù)器上

配置文件

Maven 項目的配置文件為項目根目錄下的pom.xml文件,該文件中主要包含以下幾部分:

  • groupIdartifactId標(biāo)簽分別表示組織/公司的標(biāo)識和項目的標(biāo)識,這兩個 id 共同定義了這個項目在 Maven 倉庫中的唯一坐標(biāo)
  • version標(biāo)簽表示項目的版本信息
  • build標(biāo)簽用于定義項目的構(gòu)建過程
  • dependency標(biāo)簽用于定義項目依賴的外部庫
  • repositories標(biāo)簽用于定義項目的遠(yuǎn)程倉庫

例如:

  • 基本配置:
<!-- 組織標(biāo)識 -->
<groupId>org.apache.maven.extensions</groupId>
<!-- 項目標(biāo)識 -->
<artifactId>beer-maven-lifecycle</artifactId>
<!-- 項目版本號 -->
<version>1.0-SNAPSHOT</version>

<!-- 項目的依賴 -->  
<dependencies> 
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-core</artifactId>
        <version>3.6.1</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.plexus</groupId>
        <artifactId>plexus-component-annotations</artifactId>
        <version>1.7.1</version>
    </dependency>
</dependencies>  

<!-- 項目的遠(yuǎn)程倉庫 --> 
<repositories>
  <repository>
    <id>companyname.lib1</id>
    <url>http://download.companyname.org/maven2/lib1</url>
  </repository>
</repositories>
  • 構(gòu)建配置:
<build>  

    <!-- 構(gòu)建出的文件名,默認(rèn)值是${artifactId}-${version}。 -->  
    <finalName>myPorjectName</finalName>  

    <!-- 構(gòu)建產(chǎn)生的所有文件存放的目錄,默認(rèn)為項目根目錄下的target -->  
    <directory>${basedir}/target</directory>  

    <!-- 項目相關(guān)的所有資源路徑列表 -->  
    <resources>  
        <resource>  
            <!-- 描述了資源的目標(biāo)路徑 -->  
            <targetPath>resources</targetPath>  

            <!-- 描述存放資源的目錄,該路徑相對POM路徑 -->  
            <directory>src/main/resources</directory>  

            <!-- 包含的模式列表 -->  
            <includes>  
                <include>**/*.properties</include>  
                <include>**/*.xml</include>  
            </includes>  

            <!-- 排除的模式列表 如果<include>與<exclude>劃定的范圍存在沖突,以<exclude>為準(zhǔn) -->  
            <excludes>  
                <exclude>jdbc.properties</exclude>  
            </excludes>  

        </resource>  
    </resources>  

    <!-- 單元測試相關(guān)的所有資源路徑,配制方法與resources類似 -->  
    <testResources>  
        <testResource>  
        </testResource>  
    </testResources>  

    <!-- 項目源碼目錄,相對于pom.xml路徑 -->  
    <sourceDirectory>${basedir}\src\main\java</sourceDirectory>  

    <!-- 項目單元測試使用的源碼目錄相對于pom.xml路徑 -->  
    <testSourceDirectory>${basedir}\src\test\java</testSourceDirectory>  

    <!-- 項目的一系列構(gòu)建擴(kuò)展 -->  
    <extensions>  
        <extension>  
            <groupId>org.apache.maven.wagon</groupId>  
            <artifactId>wagon-ssh</artifactId>  
            <version>2.8</version>  
        </extension>  
    </extensions>  

    <!-- 使用的插件列表  -->  
    <plugins>  
        <plugin>  
            <groupId></groupId>  
            <artifactId>maven-assembly-plugin</artifactId>  
            <version>2.5.5</version>  

            <!-- 在構(gòu)建生命周期中執(zhí)行一組目標(biāo)的配置 -->  
            <executions>  
                <execution>  
                    <!-- 執(zhí)行目標(biāo)的標(biāo)識符 -->  
                    <id>assembly</id>  

                    <!-- 綁定了目標(biāo)的構(gòu)建生命周期階段 -->  
                    <phase>package</phase>  

                    <!-- 配置的執(zhí)行目標(biāo) -->  
                    <goals>  
                        <goal>single</goal>  
                    </goals>  
                </execution>  
            </executions>  

            <!-- 項目引入插件所需要的額外依賴 -->  
            <dependencies>  
                <dependency>...</dependency>  
            </dependencies>  
        </plugin>  
    </plugins>  
</build>  

倉庫

Maven 倉庫用于存儲項目的依賴文件,分為本地倉庫、遠(yuǎn)程倉庫和中央倉庫

  • 本地倉庫

    本地倉庫位于開發(fā)人員自己的計算機(jī)上,保存著項目的所有依賴。在運行 Maven 構(gòu)建時,Maven 會自動將所有依賴下載到本地倉庫以供使用。

    Maven 本地倉庫默認(rèn)被創(chuàng)建在%USER_HOME% 目錄下??梢栽?%M2_HOME%\conf目錄中的settings.xml中修改

  • 中央倉庫

    中央倉庫由 Maven 社區(qū)提供,包含大量的常用庫,通過網(wǎng)絡(luò)進(jìn)行訪問,不需要進(jìn)行配置。

  • 遠(yuǎn)程倉庫

    遠(yuǎn)程倉庫由項目組織定義,需要通過項目的 pom xml文件進(jìn)行配置,

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內(nèi)容

  • Maven的基本了解 什么是Maven? Maven就是Apache下的一個開源項目。它是用純java開發(fā)的。是一...
    Bcome閱讀 2,853評論 0 7
  • 一、maven的兩個作用 項目自動化構(gòu)建,通過命令行就可以完成整個項目構(gòu)建過程,不需要我們手動地進(jìn)行項目構(gòu)建 管理...
    lifeline張閱讀 859評論 0 1
  • 1. 什么是maven 翻譯為“專家”,“內(nèi)行” Maven是跨平臺的項目管理工具。主要服務(wù)于基于Java平臺的項...
    六月星空2011閱讀 443評論 0 1
  • 《把日子寫成詩》 有時日子如棉花糖 一點一點的舔 最后剩一根棍子 我收集很多棍子 每一根都刻上你的名字 月亮爬到窗...
    金書js閱讀 596評論 14 13
  • 2019-01-30 姓名:符振華(378期 反省三組) 公司:深圳蔚藍(lán)時代商業(yè)管理有限公司-上海第一分公司 【日...
    Hank_dec5閱讀 119評論 0 0