天天看點

Maven基礎知識與使用總結

Apache Maven:https://maven.apache.org/what-is-maven.html

Apache Maven是一個軟體項目管理和綜合工具。基于項目對象模型(POM)的概念,Maven可以從一個中心資料片管理項目建構,報告和檔案。

Maven主要目标是提供給開發人員:

項目是可重複使用,易維護,更容易了解的一個綜合模型。

插件或互動的工具,這種聲明性的模式。

Maven項目的結構和内容在一個XML檔案中聲明,pom.xml 項目對象模型(POM),這是整個Maven系統的基本單元。有關詳細資訊,請參閱Maven POM的部分。

中心倉庫:https://mvnrepository.com/

sonatype:https://search.maven.org/

其他參考資料:

https://www.liaoxuefeng.com/wiki/1252599548343744/1255945359327200

http://c.biancheng.net/maven/

由于maven依賴jdk的運作,需要先在本地配置jdk的環境變量,然後在配置maven環境變量,本文暫就不叙述。

JDK 環境安裝好之後,接下來正式安裝配置 Maven。

下載下傳位址:https://maven.apache.org/download.cgi

解壓後:

Maven基礎知識與使用總結

安裝好後,接下來對 Maven 進行配置。配置内容同 JDK 的配置内容一樣,也是兩部分:一部分是在系統環境變量或者使用者環境變量中配置一個 MAVEN_HOME;另一部分也是将 Maven 裡面的 bin 目錄添加到 Path 環境變量。

配置 MAVEN_HOME

Maven基礎知識與使用總結

追加 Path

Maven基礎知識與使用總結

測試安裝是否成功

打開一個 CMD 視窗,輸入“mvn-v”指令運作

Maven基礎知識與使用總結

實際上我們可以将本地倉庫了解“緩存”,目的是存放jar包。開發項目時項目首先會從本地倉庫中擷取 jar 包,當無法擷取指定 jar 包的時候,本地倉庫會從 遠端倉庫(或 中央倉庫) 中下載下傳 jar 包,并“緩存”到本地倉庫中以備将來使用。

預設路徑在我們C槽目錄下。這裡不建議放到C槽,那麼如何修改這個預設配置呢。

打開maven安裝目錄\conf\setting.xml檔案。我自己的路徑:E:\maven_3.6.1\apache-maven-3.6.1\conf

某個jar包一旦被Maven下載下傳過,即可永久地安全緩存在本地。

Maven基礎知識與使用總結

最後檢查一下配置是否正确。輸入指令:<code>mvn help:system</code>

Maven是目前流行的項目管理工具,但官方的庫在國外經常連不上,連上也下載下傳速度很慢。

在maven的配置檔案  settings.xml  中添加

一個完整的坐标資訊,由 groupId、artifactId、version、packaging、classifier 組成,如下是一個簡單的坐标定義。

groupId :屬于組織的名稱,類似Java的包名;

artifactId : 該jar包自身的名稱,類似Java的類名;

version : 該jar包的版本。

通過上述3個變量,即可唯一确定某個jar包。Maven通過對jar包進行PGP簽名確定任何一個jar包一經釋出就無法修改。修改已釋出jar包的唯一方法是釋出一個新版本。

注:隻有以-SNAPSHOT結尾的版本号會被Maven視為開發版本,開發版本每次都會重複下載下傳,這種SNAPSHOT版本隻能用于内部私有的Maven repo,公開釋出的版本不允許出現SNAPSHOT。

生命周期階段

描述

validate(校驗)

校驗項目是否正确并且所有必要的資訊可以完成項目的建構過程。

initialize(初始化)

初始化建構狀态,比如設定屬性值。

generate-sources(生成源代碼)

生成包含在編譯階段中的任何源代碼。

process-sources(處理源代碼)

處理源代碼,比如說,過濾任意值。

generate-resources(生成資源檔案)

生成将會包含在項目包中的資源檔案。

process-resources (處理資源檔案)

複制和處理資源到目标目錄,為打包階段最好準備。

compile(編譯)

編譯項目的源代碼。

process-classes(處理類檔案)

處理編譯生成的檔案,比如說對Java class檔案做位元組碼改善優化。

generate-test-sources(生成測試源代碼)

生成包含在編譯階段中的任何測試源代碼。

process-test-sources(處理測試源代碼)

處理測試源代碼,比如說,過濾任意值。

generate-test-resources(生成測試資源檔案)

為測試建立資源檔案。

process-test-resources(處理測試資源檔案)

複制和處理測試資源到目标目錄。

test-compile(編譯測試源碼)

編譯測試源代碼到測試目标目錄.

process-test-classes(處理測試類檔案)

處理測試源碼編譯生成的檔案。

test(測試)

使用合适的單元測試架構運作測試(Juint是其中之一)。

prepare-package(準備打包)

在實際打包之前,執行任何的必要的操作為打包做準備。

package(打包)

将編譯後的代碼打包成可分發格式的檔案,比如JAR、WAR或者EAR檔案。

pre-integration-test(內建測試前)

在執行內建測試前進行必要的動作。比如說,搭建需要的環境。

integration-test(內建測試)

處理和部署項目到可以運作內建測試環境中。

post-integration-test(內建測試後)

在執行內建測試完成後進行必要的動作。比如說,清理內建測試環境。

verify (驗證)

運作任意的檢查來驗證項目包有效且達到品質标準。

install(安裝)

安裝項目包到本地倉庫,這樣項目包可以用作其他本地項目的依賴。

deploy(部署)

将最終的項目包複制到遠端倉庫中與其他開發者和項目共享。

通常情況下,Maven 的版本号約定中包括如下幾個部分:

&lt;主版本号&gt;.&lt;次版本号&gt;.&lt;增量版本号&gt;.&lt;裡程碑版本号&gt;

主版本号:主版本号表示該項目的重大更新。例如:Maven1 到 Maven2;

次版本号:表示在該主版本下,較大範圍的更新或變化。例如:Maven-3.0 到 Maven-3.1;

增量版本号:增量版本通常是用來修複bug的版本。例如:Maven-3.1.1;

裡程碑版本号:用來标記裡程碑版本。例如:Maven-3.0-alpha-3。

packaging :定義Maven項目打包的方式,使用構件的什麼包。首先,打包方式通常與所生成構件的檔案擴充名對應,如上例中沒有packaging,則預設為jar包,最終的檔案名為junit-3.8.1.jar。也可以打包成war等。

classifier: 該元素用來幫助定義建構輸出的一些附件。附屬構件與主構件對應,如上例中的主構件為junit-3.8.1.jar,該項目可能還會通過一些插件生成如junit-3.8.1-javadoc.jar,junit-3.8.1-sources.jar, 這樣附屬構件也就擁有了自己唯一的坐标。

上述5個元素中,groupId、artifactId、version是必須定義的,packaging是可選的(預設為jar),而classfier是不能直接定義的,需要結合插件使用。

Maven定義了幾種依賴關系,分别是<code>compile</code>、<code>test</code>、<code>runtime</code>和<code>provided</code>:

scope

說明

示例

compile

編譯時需要用到該jar包(預設)

commons-logging

test

編譯Test時需要用到該jar包

junit

runtime

編譯時不需要,但運作時需要用到

mysql

provided

編譯時需要用到,但運作時由JDK或某個伺服器提供

servlet-api

如果我們運作<code>mvn package</code>,Maven就會執行<code>default</code>生命周期,它會從開始一直運作到<code>package</code>這個phase為止:

validate

...

package

如果我們運作<code>mvn compile</code>,Maven也會執行<code>default</code>生命周期,但這次它隻會運作到<code>compile</code>,即以下幾個phase:

Maven另一個常用的生命周期是<code>clean</code>,它會執行3個phase:

pre-clean

clean (注意這個clean不是lifecycle而是phase)

post-clean

在實際開發過程中,經常使用的指令有:

<code>mvn clean</code>:清理所有生成的class和jar;

<code>mvn clean compile</code>:先清理,再執行到<code>compile</code>;

<code>mvn clean test</code>:先清理,再執行到<code>test</code>,因為執行<code>test</code>前必須執行<code>compile</code>,是以這裡不必指定<code>compile</code>;

<code>mvn clean package</code>:先清理,再執行到<code>package</code>。

一個使用Maven管理的普通的Java項目,它的目錄結構預設如下: