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 進行配置。配置内容同 JDK 的配置内容一樣,也是兩部分:一部分是在系統環境變量或者使用者環境變量中配置一個 MAVEN_HOME;另一部分也是将 Maven 裡面的 bin 目錄添加到 Path 環境變量。
配置 MAVEN_HOME
追加 Path
測試安裝是否成功
打開一個 CMD 視窗,輸入“mvn-v”指令運作
實際上我們可以将本地倉庫了解“緩存”,目的是存放jar包。開發項目時項目首先會從本地倉庫中擷取 jar 包,當無法擷取指定 jar 包的時候,本地倉庫會從 遠端倉庫(或 中央倉庫) 中下載下傳 jar 包,并“緩存”到本地倉庫中以備将來使用。
預設路徑在我們C槽目錄下。這裡不建議放到C槽,那麼如何修改這個預設配置呢。
打開maven安裝目錄\conf\setting.xml檔案。我自己的路徑:E:\maven_3.6.1\apache-maven-3.6.1\conf
某個jar包一旦被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 的版本号約定中包括如下幾個部分:
<主版本号>.<次版本号>.<增量版本号>.<裡程碑版本号>
主版本号:主版本号表示該項目的重大更新。例如: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項目,它的目錄結構預設如下: