1. 程式人生 > >【工具使用】----專案管理工具Maven

【工具使用】----專案管理工具Maven

前言

    最近小編在專案開發的過程中用到了專案管理工具Maven,在沒有接觸該專案之前,小編是完全沒有聽說過Maven的,現在就讓小編以Maven小白的水平來看看,Maven到底是什麼,幹什麼用的吧。

敘述

What

Maven

   Maven是基於專案物件模型(POM project object model),可以通過一小段描述資訊(配置)來管理專案的構建,報告和文件的軟體專案管理工具。Maven的核心功能便是合理敘述專案間的依賴關係。通俗一點的說,就是通pom.xml檔案的配置獲取jar包,而不用手動去新增jar包。

maven的核心概念:座標、依賴、倉庫、生命週期、外掛

座標

   Maven的世界中擁有數量非常巨大的構件,也就是平時用的一些jar、war等檔案。Maven座標為各種構件引入了秩序,任何一個構件都需要明確定義自己的座標,而一組Maven座標是通過一些元素定義的,它們是

groupId、artifactId、version、Packaging、Classifier。

    <groupId>com.dmsdbj.library</groupId>
    <artifactId>library</artifactId>
    <version>1.0-snapshot</version>
    <packaging>war</packaging>

groupId:定義當前Maven專案隸屬的實際專案。
artifactId:該元素定義實際專案中的一個Maven專案(模組)
version:該元素定義Maven專案當前所處的版本
Packaging:該元素定義Maven專案的打包方式。
Classifier:該元素用來幫助定義構建輸出的一些附屬構件。

依賴

   在maven的管理體系中,各個專案組成了一個複雜的關係網,但是每個專案都是平等的,是個沒有貴賤高低,眾生平等的世界,全球每個專案從理論上來說都可以相互依賴。依賴關係是最常用的一種,就是你的專案需要依賴其他專案。

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
      <type >jar</ type >
      <optional >true</ optional >
 </dependency>
groupId,必選,實際隸屬專案
artifactId,必選,其中的模組
version必選,版本號
type可選,依賴型別,預設jar
scope可選,依賴範圍,預設compile
optional可選,標記依賴是否可選,預設false
exclusion可選,排除傳遞依賴性,預設空

倉庫

  Maven可以在某個位置統一儲存所有Maven專案共享的構件,這個統一的位置就是倉庫。實際的Maven專案將不再各自儲存其依賴檔案,它們只需要宣告這些依賴的座標,在需要的時候,Maven會自動根據座標找到倉庫中的構件,並使用它們。

倉庫的分類:本地倉庫和遠端倉庫。


   對於Maven來說 ,倉庫只分為兩類:本地倉庫和遠端倉庫,當Maven根據座標找構件的時候,它首先會檢視本地倉庫 ,如果本地倉庫存在此構件,則直接使用;如果本地倉庫不存在此構件,或者需要檢視是否有更新的構件版本 ,就會去 遠端倉庫查詢 ,發現需要的構件之後,下載到本地倉庫再使用,如果本地倉庫和遠端倉庫都沒有需要的構件 ,Maven就會報錯。 


私服

  私服是一種特殊的遠端倉庫,它是架設在區域網內的倉庫服務,私服代理廣域網上的遠端倉庫,供區域網內的Maven使用者使用。當Maven需要下載構件的時候,它從私服請求,如果私服上不存在該構件,則從外部的遠端倉庫下載,快取在私服上之後,再為Maven的下載請求提供服務。此外,一些無法從外部倉庫下載到的構件也能從本地上傳到私服上供大家使用。


生命週期

   Maven的生命週期就是為了對所有的構建過程進行抽象和統一。Maven從大量專案和構建工具中學習和反思,然後總結了一套高度完善的、易擴充套件的生命週期。這個生命週期包含了專案的清理、初始化、編譯、測試、打包、整合測試、驗證、部署、站點生成 。

在maven中存在“三套”生命週期,每一套生命週期相互獨立,互不影響,
在一套生命週期內,執行後面的命令,前面操作會自動執行。
CleanLifeCycle: 清理生命週期   Clean
defaultLifeCycle:預設生命週期  compile,test,package,install,deploy
slteLifeCycle:站點生命週期   

外掛

   Maven核心的分佈包只有不到3MB的大小,Maven會在需要的時候下載並使用外掛。

when

   Maven主要服務於基於Java平臺的專案構建、依賴管理和專案資訊管理。無論是小型的開源類庫專案,還是大型的企業級應用;無論是傳統的瀑布式開發,還是流行的敏捷模式,Maven都能大顯身手。

Maven的安裝目錄介紹

bin :該目錄包含了mvn執行的指令碼,這些指令碼用來配置Java命令,準備好classpath和相關的Java系統屬性,然後執行Java命令。其中mvn 是基於UNIX平臺的shell 腳 本 ,mvn. bat 是 基 於 Windows 平 臺 的 bat 腳 本 。在命令列輸入任 何 一 條 mvn 命令時 ,實際上就是在呼叫這些指令碼 。該目錄還包含了mvnDebug 和 mvnDebug. bat 兩 個 文 件 , 同 樣 ,前 者 是 UNIX 平 臺 的 shell 腳 本 ,後者是 Windows 平臺的bat 指令碼 。mvnDebug 多 了 一 條 MAVEN-DEBUG-OPTS 配 置 ,其作用就是在執行行 Maven 時開啟 debug ,以便除錯Maven 本 身 .此 外 ,該目錄還包含m2. conf 文 件,這 是 classworlds的配置檔案。


boot:該目錄只包含一個檔案。plexus-classworlds是一個類載入器框架,相當於預設的java類載入器,它提供了更豐富的語法以方便配置,maven使用該框架載入自己的類庫。


conf:該目錄包含了一個非常重要的檔案setting.xml.直接修改該檔案,就能在機器上全域性地定製maven的行為。

lib:該目錄包含了所有Maven執行時需要的java類庫(jar包),Maven本身是分模組開發的。

LICENSE.txt:記錄了Maven 使用的軟體許可證 Apache License Version 2.0 。
NOTICE.txt:記 錄了Maven包含的第三方軟體 ; 

README.txt:包含了Maven的簡要介紹,包括安裝需求及如何安裝的簡要指令等 。

why

Maven的兩大核心:
依賴管理:對jar包統一管理
專案構建:專案在編碼完成後,對專案進行編譯、測試、打包、部署一系列的操作都通過命令來實現

優點:

1、不再拷貝jar包。專案不需要存放燦包。導致專案滋程式碼刁

2、使用maven開發的工程,如果環境統一匯入別的maven的專案不會報錯
3、程式碼耦含度進一步降低.

4、方便專案進行廾繢

5、節省人力成本.

how

Maven常用命令


小結

   人和動物最大的區別就是:人善於利用工具,所以不管做什麼事情,都要善於利用工具,只有對此工具掌握了,才會提高效率,加快學習的腳步。