pandaAnthony:Maven學習

接觸maven已經很久了,在清理電腦資料中發現以前寫的一篇maven培訓的文章,整理下發出來方便初學者了解下一些maven的基礎(文中沒提到的請參考官網)。

一、什么是Maven?

Maven是Apache下的開源項目http://maven.apache.org/
Maven有“內行”和“專家”的意思,也可以翻譯成為“知識的積累”。
Apache Maven is a software project management and comprehension tool.
Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
Maven是軟件項目管理和理解的工具。
基于項目對象模型POM(Project-Object-Model),Maven開源通過一小段描述信息來管理項目構建,報告和文檔。

二、為什么用Maven?

以前我們普通的java項目,當需要依賴包的時候需要從其官網上下載對應的依賴jar包,需要我們手動的導入到lib文件夾下。而用maven構建項目,我們只需要寫上jar包的名字和版本信息,maven會自動去網站上下載我們需要的jar。執行代碼的時候需要我們去編譯、運行單元測試、生成文檔、打包、部署,而maven工具為我們封裝了這些重復的工作。

1. Maven讓build過程簡單

Maven有中心倉庫https://repo.maven.apache.org/maven2 ,默認配置都會去中心倉庫下載包;下載的包會存儲到本地倉庫。項目中一般會搭建私有倉庫,用來管理項目中相關的包。
不需要去到處找jar,只需要添加依賴。可以通過http://mvnrepository.com/ 去找。
代碼復用,可以將公共的代碼或者其他人需要調用的jar抽離出來發布到私有Maven庫上,其他人只需要關注需要用引入依賴,不需要關心依賴的jar。

2. Maven可以方便的發布版本

Maven提供了很方便的插件進行版本發布,通過簡單的命令(mvn deploy)就能將工程發布到Maven倉庫中。

3. 方便學習開源項目

github和碼云上大多數的開源項目都會用到Maven,可以通過Maven命令直接運行。

三、Maven安裝

首先要必須安裝java,Maven3.3以上版本必須要jdk1.7以上版本。
在Maven官網下載頁https://maven.apache.org/download.cgi 找到需要的安裝包以及系統要求:

image.png

將安裝包復制到需要安裝Maven的機器上解壓,然后設置環境變量M2_HOME,指向對應的Maven目錄;然后將M2_HOME\bin加到path中。(這里就不詳細描述怎么配置環境變量了,系統不一樣配置方式不一樣,linux記得source下讓環境變量生效)。
在命令行執行

mvn -v

查看是否安裝成功。


image.png

四、Maven配置

1.setting.xml 配置

在maven安裝目錄下進入conf文件夾,可以找到setting.xml文件。
詳細介紹http://maven.apache.org/settings.html

image.png

一般我們需要修改的配置:
localRepository:本地存儲artifacts路徑,所有下載的包和本地安裝的包都會放在這里。


image.png

servers:發布snapshot和release的server,和項目設置結合使用


image.png

對應的pom設置(這里配置的url是搭建好的maven私服地址):
image.png

mirrors:倉庫鏡像,通過鏡像去獲取包(地址是搭建好的maven私服地址)
image.png

profiles:我們這里是用來激活配置的maven鏡像去下載maven2中心庫的包(其中配置的地址是maven倉庫的默認地址)


image.png

2. pom文件

pom是項目對象模型 (Project Object Model)的簡稱,當Maven運行的時候它向項目對象模型(POM)查看關于這個項目的信息。POM回答類似這樣的問題:這個項目是什么類型的?這個項目的名稱是什么?這個項目的構建有自定義么?
詳細介紹可以查看http://maven.apache.org/pom.html

image.png

2.1 Maven坐標(Coordinates)

groupId, artifactId, version和packaging這些組合的標識符拼成了一個項目的坐標:
groupId :團體,公司,小組,組織,項目,或者其它團體。團體標識的約定是,它以創建這個項目的組織名稱的逆向域名(reverse domain name)開頭。來自Sonatype的項目有一個以com.sonatype開頭的groupId,而Apache Software的項目有以 org.apache開頭的groupId。
artifactId:在groupId下的表示一個單獨項目的唯一標識符。
version:一個項目的特定版本。發布的項目有一個固定的版本標識來指向該項目的某一個特定的版本。而正在開發中的項目可以用一個特殊的標識,這種標識給版本加上 一個“SNAPSHOT”的標記。
packaging:項目的類型,默認是jar,描述了項目打包后的輸出。類型為jar的項目產生一個 JAR文件,類型為war的項目產生一個web應用。
Maven倉庫(repositories)(公共的,私有的,和本地的)是通過這些標識符來組織的。當一個項目被安裝到本地的Maven倉庫,它立刻能被任何其它的項目所使用。而我們所需要做的只是,在其它項目用使用Maven的唯一坐標來加入對這個特定 構件的依賴。

2.2 Maven依賴管理 (Dependency Management)

在<dependencies>標簽中,根據maven坐標來定義:


image.png

這里發現與maven坐標不同的是多了scope。
Dependency scope 是用來限制Dependency的作用范圍的, 影響maven項目在各個生命周期時導入的package的狀態。
compile:默認的scope,表示 dependency 都可以在生命周期中使用。而且,這些dependencies 會傳遞到依賴的項目中。
provided:跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。這個scope 只能作用在編譯和測試時,同時沒有傳遞性。使用這個時,不會將包打入本項目中,只是依賴過來。
runtime:表示dependency不作用在編譯時,但會作用在運行和測試時
test:表示dependency作用在測試時,不作用在運行時。
system:跟provided 相似,但是在系統中要以外部JAR包的形式提供,maven不會在repository查找它。
我們項目中一般使用默認的compile和test范圍。
一個復雜的項目將會包含很多依賴,也有可能包含依賴于其它構件的依賴。這是Maven 最強大的特征之一,它支持了傳遞性依賴(transitive dependencies)。假如你的項目依賴于一個庫,而這個庫又依賴于五個或者十個其它的庫(就像Spring或者 Hibernate那樣)。你不必找出所有這些依賴然后把它們寫在你的pom.xml里,你只需 要加上你直接依賴的那些庫,Maven會隱式的把這些庫間接依賴的庫也加入到你的項目 中。Maven也會處理這些依賴中的沖突,同時能讓你自定義默認行為,或者排除一些特定的傳遞性依賴。


image.png

2.3 Maven構建(build)

根據需要添加插件構建項目:

image.png

具體的plugins可以參考官網http://maven.apache.org/plugins/index.html (除了Build plugins還有下面要介紹的Reporting plugins)
image.png

2.4 Maven報表(reporting)

Maven可以同過mvn site來生成文檔和報告,生成doc文檔需要額外引用插件:


image.png

五、Maven命令

在介紹什么是Maven的時候提到‘運行定義在生命周期階段(phase)中插件(plugin)目標(goal)的邏輯’,Maven的命令是基于生命周期來執行的。

5.1 Maven生命周期

Maven有三套相互獨立的生命周期,請注意這里說的是“三套”,而且“相互獨立”,這三套生命周期分別是:
Clean Lifecycle 在進行真正的構建之前進行一些清理工作。
Default Lifecycle 構建的核心部分,編譯,測試,打包,部署等等。
Site Lifecycle 生成項目報告,站點,發布站點。
最核心的是Default Lifecycle:

image.png

image.png

記住,運行任何一個階段的時候,它前面的所有階段都會被運行,這也就是為什么我們運行mvn install 的時候,代碼會被編譯,測試,打包。
官網詳細介紹查看:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

5.2 Maven常用命令

mvn test 運行應用程序中的單元測試
mvn clean 清除項目目錄中的生成結果
mvn package 根據項目生成的指定格式的文件(jar,war。。。)
mvn install 在本地Repository中安裝
mvn site 生成項目相關信息的網站 需要檢查項目的doc注解是否合要求。
mvn deploy 發布項目到公司的maven庫。 執行這個命令時需要有nexus賬號,并且有權限發布。開發過程中只有在其他人需要用到你開發的包時需要做發布操作,需要確保發布到公司nexus上的包是經過測試的穩定的。
可以組合著用,比如最常用的組合:mvn clean install。

六、Maven repository管理工具

參考官網介紹http://maven.apache.org/repository-management.html

image.png

搭建私服一般會用Sonatype Nexus OSS

image.png

如果有興趣自己在windows下搭建maven私服的可以參考windows下搭建maven私服

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372