咱們接着上篇文章,來繼續介紹Maven中幾個核心的概念:html
POM (Project Object Model)
Maven 插件
Maven 生命週期
Maven 依賴管理
Maven 庫
咱們首先來看一下,上篇文章作演示的時候生成的pom.xml文件:web
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.test.helloworld</groupId> <artifactId>helloworld</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>helloworld</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
在該配置文件中有三個必須寫的字段,groupId,artifactId,version。groupId表明組織或者建立團隊的名字,一般用域名全稱倒過來,好比說Apache maven 官方就是org.apache.maven。artifactId表示項目的惟一名稱。version標識項目開發的版本,snapshot一般表示一個項目處於開發階段。apache
全部的項目都繼承super POM文件,除非有額外的特殊設置。服務器
Maven 生命週期maven
項目構建和分發的過程就是一個項目的生命週期。系統內置有三種構建生命週期:default, clean 和 site。default生命週期處理項目部署的問題,clean處理項目的清理問題,site處理項目的站點文檔問題。不一一說明了,詳細能夠參考官方文檔中的說明 http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.htmlide
clean 生命週期中經常使用的操做:post
mvn pre-clean 執行實際項目清理前所須要的流程單元測試
mvn clean 用來清理構建階段產生的文件(刪除生成的target目錄)測試
mvn post-clean 執行完成項目清理所須要的流程網站
default 生命週期經常使用的操做:
mvn validate 驗證項目配置項或者必要的信息是否正確
mvn initialize 初始化構建狀態,好比設置屬性或者是建立目錄
mvn compile 將項目文件進行編譯
mvn test 對項目進行單元測試,這個過程不要求項目代碼被打包或者是部署(若是代碼沒有被編譯,那麼將首先執行compile的過程)
mvn package 將已經編譯好的代碼打包爲分發的格式,好比jar,或者war等
mvn verify 對集成結果進行檢查,測試是否知足預期要求
mvn install 將項目安裝到本身本地倉庫,用做本地其餘項目依賴項
mvn deploy 在繼承環境或者版本環境中完成,將最終包複製到遠程倉庫
site 生命週期經常使用的操做:
mvn pre-site 執行項目生成以前所須要的流程
mvn site 生成項目文檔
mvn post-site 執行完成網站所須要的流程,爲站點部署作準備
mvn site-deploy 將生成的項目文檔上傳至指定服務器
Maven 插件
Maven經過插件實現其功能,整個Maven都是插件的集合。簡單來講,插件能夠幫助咱們建立jar文件,建立war文件,編譯文件,進行單元測試等。任何項目中你可以想到的功能都是經過插件來實現的。
Maven依賴管理
Maven經過pom.xml文件dependency標籤來配置整個項目的依賴包,而後全部的dependency標籤被放在它的父標籤dependencies中組成一個依賴庫的集合。好比,
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies>
這裏dependency節點中,goupId依舊是組織或者建立團隊的名字,artifactId爲該插件的名字,version爲該插件的版本號。scope爲該插件的做用範圍。依賴範圍用於限制依賴關係傳遞性,並會影響到各種構建 任務的類文件路徑。默認若是配置了該選項,插件將會從http://repo.maven.apache.org/maven2/進行下載。在首次安裝的時候咱們能夠看到download from xxx。
scope有6種可用的配置項:
compile 這是默認的配置選項,編譯的依賴關係在全部項目類路徑均可用。並且,這些依賴關係被傳遞到依賴項目。
provided 這個和compile選項很相似,表示在JDK或容器運行時提供依賴關係。 例如,在爲Java Enterprise Edition構建Web應用程序時,能夠將Servlet API和相關的Java EE API的依賴項設置爲範圍,由於Web容器提供了這些類。 此做用域僅在編譯和測試類路徑中可用,不可傳遞。
runtime 顧名思義,這個配置項是在項目運行時調用依賴插件,而不是編譯的時候。
test 這個主要用於測試階段,對於項目並非必須不可的。不可傳遞。
system 與provided相似,除非明確指定包含它的jar文件。
import (Maven 2.0.9+) 只支持在<dependencyManagement>部分的類型pom依賴。 它指示依賴項將被替換爲指定POM的<dependencyManagement>部分中的依賴關係的有效列表。 因爲它們被替換,所以具備導入範圍的依賴關係實際上並不參與限制依賴關係的傳遞性。
若是有多個子項目有公共的依賴庫文件,那麼咱們能夠在其父pom文件中指定,這樣子pom直接作繼承就行了。詳細狀況能夠參考官方文檔:
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
這裏須要注意的是,若是子類依賴包的類型不同,那麼須要在繼承以後特別設置type字段。由於依賴尋找的順序是{groupId, artifactId, type, classifier},在不少狀況下咱們僅僅須要指定{groupId, artifactId},由於默認狀況下type的類型爲jar。
Maven 庫
Maven庫被分爲本地庫和遠程庫,本地庫能夠看作是安裝時遠程庫的一個副本,還包括本地項目構建時的臨時構建工做。遠程庫指除了本地庫之外的其餘庫,能夠經過好比file:// 或者 http:// 協議對文件進行訪問下載的。好比一些第三方庫,repo.maven.apache.org和uk.maven.org maven的中心庫等。另一些好比公司內部搭建的庫,用於內部分享相對隱私的數據。咱們能夠經過maven安裝目錄下,conf目錄中的settings.xml來對遠程倉庫的地址進行配置。具體的配置說明能夠參考官方的文檔,或者settings.xml的註釋部分。這裏就很少講了。
本地倉庫的位置在用戶家目錄下一個.m2的隱藏文件夾,而後裏邊有個repository的目錄,好比我這裏:
好比web container插件jetty:
咱們能夠在本身的項目編譯好以後將其部署到咱們本地的庫中,咱們在咱們的項目目錄中(pom.xml)所在的目錄執行 mvn install。
若是有遠成倉庫的上傳權限,咱們也能夠將作好的項目上傳至遠程倉庫。