Maven這個詞的中文翻譯是?java
能夠翻譯爲"知識的積累",也能夠翻譯爲"專家"或"內行"編程
Maven是啥?幹什麼的?服務器
1、一個跨平臺的項目管理工具框架
2、Apache組織的一個頗爲成功的開源項目eclipse
3、Maven主要服務於基於Java平臺的項目構建、依賴管理和項目信息管理編程語言
4、適合小型的開源類項目、大型的企業級應用工具
5、適合傳統的瀑布式開發、流行的敏捷模式開發單元測試
跨平臺是指?Maven是跨平臺的測試
不管是Windows、Linux或者Mac上,均可以使用相同的命令,沒必要在乎底層的細節ui
什麼是傳統的瀑布式開發?
什麼是流行的敏捷模式開發?
你的一天的工做多是這樣的
1、早上來到公司,從源碼庫簽出最新的代碼,而後進行單元測試
2、若是發現失敗的測試,會找相關的同事一塊兒調試,修復錯誤代碼
3、接着回到本身的工做上來,編寫本身的單元測試及產品代碼,咱們會感激IDE隨時報出的編譯錯誤提示
4、忙到午餐時間,代碼編寫的差很少了,測試也經過了,開心地享用午飯,而後休息
5、下午先在昏昏沉沉中開了個例會,會議結束後喝杯咖啡繼續工做
6、剛纔在會上經理要求看測試報告,因而找了相關工具集成進IDE,生成了像模像樣的測試覆蓋率報告,接着發了一封電子郵件給經理,鬆了一口氣
7、誰料QA小組又發過來了幾個bug,沒辦法,先本地重現再說,因而熟練地用IDE生成了一個WAR包,部署到Web容器下,啓動容器。
8、看到熟悉的界面了,遵循bug報告,一步步重現了bug,快下班的時候,bug修復好了,提交代碼,通知QA小組,在愉快中結束了一天的工做
那麼,什麼是構建(項目構建)?用軟件實現項目自動構建?
1、在上面的說明中,除了編寫源代碼,咱們天天有至關一部分時間花在了編譯、運行單元測試、生成文檔、打包和部署等繁瑣且不起眼的工做上,這就是構建
2、若是,咱們如今還手工這樣作,那成本也過高了,因而有人用軟件的方法讓這一系列工做徹底自動化,使得軟件的構建能夠像全自動流水線同樣,只須要一條簡單的命令,全部繁瑣的步驟都能自動完成,很快就能獲得最終的結果
Maven的特色有哪些?
1、Maven自動化構建,Maven可以幫咱們自動化構建,好比:清理、編譯、測試到生成報告,再到打包和部署
2、Maven最大化消除構建重複
3、Maven抽象了構建生命週期模型,這個模型吸收了大量其餘的構建腳本和構建工具的優勢,總結了大量項目的實際需求。若是遵循這個模型,能夠避免不少沒必要要的錯誤
4、Maven的插件,Maven爲絕大部分的構建任務提供了已實現的插件,並且還有其餘大量成熟的插件用於完成任務,也能夠本身實現插件
5、Maven統一標準化構建過程
軟件之消除重複
咱們一直在不停地尋找避免重複的方法,設計的重複、編碼的重複、文檔的重複,固然還有構建的重複
Java不只是一門編程語言,仍是一個平臺
經過JRuby和Jython,咱們能夠在Java平臺上編寫和運行Ruby和Python程序
Maven不只是構建工具,仍是一個依賴管理工具和項目信息管理工具
Maven提供中央倉庫,能自動下載jar包
依賴管理是指?
1、任何Java項目都會引入第三方開源類庫
2、隨着依賴的增多,版本不一致,版本衝突,依賴臃腫等問題,手工解決十分枯燥
3、Maven經過座標系統準肯定位每個構建(artifact),也就是經過一組座標找到任何一個Java類庫,Maven給類庫世界引入了經緯度,讓它們變得有序
4、這樣有序的管理依賴,就輕鬆的解決了繁雜的依賴問題
項目信息管理是指?
1、項目信息主要包括,項目描述、開發者列表、版本控制系統地址、許可證、缺陷管理系統地址等
2、經過Maven自動生成的站點,以及一些已有的插件,咱們還可以輕鬆得到項目文檔、測試報告、靜態分析報告、源碼版本日誌報告等很是具備價值的項目信息
Maven的免費中央倉庫是指?
給全世界的Java開發者提供的,在其中幾乎能夠找到任何的流行開源類庫,只要定位Maven就能幫咱們自動下載,省去手動下載的麻煩
Maven的衍生工具(如Nexus)
Nexus是本地私有服務器,能夠上傳一些中央服務器沒有的開源類庫,並能對其快速搜索
Maven還定義了項目目錄結構、測試用例命名方式等既定規則
約定大於配置 (Convention Over Configuration),項目結構都同樣開發起來更輕鬆
組裝PC和品牌PC
1、使用腳本創建高度自定義的構建系統就像買組裝PC,耗時費力,結果也不必定很好,但能夠享受從無到有的樂趣,但恐怕實際項目中沒法給你那麼多時間
2、使用Maven就像購買品牌PC,省時省力,並能獲得成熟的構建系統,還能獲得來自Maven社區的大量支持
IDE的做用以及IDE的缺陷
1、主流的IDE有Eclipse和NetBeans等提供了強大的文本編輯、調試甚至重構的功能
2、IDE依賴大量的手工操做,編譯、測試、代碼生成等工做都是相互獨立的很難一鍵完成全部的工做,手工勞動每每意味着低效、意味着容易出錯
3、很難在項目中統一全部的IDE配置,每一個人都有本身的喜愛,一個在A機器上成功運行的任務,到B機器的IDE中可能就會失敗
4、主流IDE都繼承了Maven,咱們能夠在IDE中方便地運行Maven執行構建
Make工具簡介
Make也許是最先的構建工具,它由Stuart Feldman於1977年的Bell實驗室建立,Stuart Feldman也所以於2003年得到了ACM國際計算機組織頒發的軟件系統獎。目前Make有不少衍生實現,包括最流行GNU Make和 BSD Make,還有Windows平臺的Microsoft nmake等
Make是什麼?
Make由一個名爲Makefile的腳本文件驅動,該文件使用Make本身定義的語法格式。其基本組成部分爲一系列規則(Rules),而每一條規則又包括目標 (Target)、依賴 (Prerequisite) 和命令 (Command)。Makefile的基本結構以下:
TARGET... : PREREQUISITE...
COMMAND
...
...
Make經過一系列目標和依賴將整個構建過程串聯起來,同時利用本地命令完成每一個目標的實際行爲。Make的強大之處在於它能夠利用全部系統的本地命令,尤爲是UNIX/Linux系統,豐富的功能、強大的命令可以幫助Make快速高效地完成任務
Make的缺陷是?
Make將本身和操做系統綁定在一塊兒了,也就是說,使用Make,就不能實現 (至少很難) 跨平臺的構建,這對於Java來講是很是不友好的,此外Makefile的語法也成問題,不少人抱怨Make構建失敗的緣由每每是一個難以發現的空格或Tab使用錯誤
Ant是什麼?
Ant不是指螞蟻,而是意指 "另外一個整潔的工具" (Another Neat Tool),它最先用來構建著名的Tomcat,其做者James Duncan Davidson創做它的動機就是由於受不了Makefile的語法格式。咱們能夠將Ant當作是一個Java版本的Make,也正由於使用了Java,Ant是跨平臺的。此外,Ant使用XML定義構建腳本,相對於Makefile來講,這也更加友好
與Make相似,Ant有一個構建腳本build.xml,以下所示:
<?xml version = "1.0"?>
<project name = "Hello" default = "compile">
<target name = "compile" description = "compile the java source code to class files" >
<mkdir dir = "classes" />
<javac srcdir = "." destdir = "classes" />
</target>
<target name = "jar" depends = "compile" description = "create a Jar file">
<jar destfile = "hello.jar">
<fileset dir = "classes" includes = " * * /* .class" />
<manifest>
<attribute name = "Main-Class" value = "HelloProgram" />
</manifest>
</jar>
</target>
</project>
build.xml的基本結構也是目標 (target)、依賴 (depends),以及實現目標的任務。好比在上面的腳本中,jar目標用來建立應用程序jar文件,該目標依賴於compile目標,後者執行的任務是建立一個名爲classes的文件夾,編譯當前目錄的java文件至classes目錄。compile目標完成後,jar目標再執行本身的任務。Ant有大量的內置的用Java實現的任務,這保證了其跨平臺的特質,同時,Ant也有特殊的任務exec來執行本地命令
Maven比Make、Ant的區別在於?
1、和Make同樣,Ant也都是過程式的,開發者顯式地指定每個目標,以及完成該目標所須要執行的任務。
2、針對每個項目,開發者都須要從新編寫這一過程,這裏其實隱含着很大的重複
3、Maven是聲明式的,項目構建過程和過程各個階段所需的工做都由插件實現,而且大部分插件都是現成的,開發者只須要聲明項目的基本元素,Maven就執行內置的、完整的構建過程,這在很大程度上消除了重複
4、Ant是沒有依賴管理的,因此很長一段時間Ant用戶都不得不手工管理依賴,這是一個使人頭疼的問題。幸運的是,Ant用戶如今能夠藉助Ivy管理依賴,而對於Maven用戶來講,依賴管理是理所固然的,Maven不只內置了依賴管理,更有一個可能擁有全世界最多Java開源軟件包的中央倉庫,Maven用戶無須進行任何配置就能夠直接享用
什麼是極限編程(XP)?
極限編程 (XP) 是近些年在軟件行業紅得發紫的敏捷開發方法,它強調擁抱變化。該軟件開發方法的創始人Kent Beck提出了XP所追求的價值、實施原則和推薦實踐
Maven是如何適應XP的?Maven如何幫助XP團隊實現一些核心價值的?
1、簡單
2、交流與反饋
3、測試驅動開發
4、十分鐘構建
5、持續集成
6、富有信息的工做區
爲何簡單?
Maven暴露了一組一致、簡潔的操做接口,能幫助團隊成員從原來的高度自定義的、複雜的構建系統中解脫出來,使用Maven現有的成熟的、穩定的組件也能簡化構建系統的複雜度
什麼是交流與反饋?
與版本控制系統結合後,全部人都能執行最新的構建並快速獲得反饋,此外,自動生成的項目報告也能幫助成員瞭解項目的狀態,促進團隊的交流
Maven如何支持測試驅動開發 (TDD)?
TDD強調測試先行,全部產品都應該由測試用例覆蓋。而測試是Maven生命週期的最重要的組成部分之一,而且Maven有現成的成熟插件支持業界流行的測試框架,如Junit和TextNG
TextNG是什麼?
十分鐘構建是指?
十分鐘構建強調咱們可以隨時快速地從源碼構建出最終的產品,這正是Maven所擅長的,只須要一些配置,以後用一條簡單的命令就能讓Maven幫你清理,編譯、測試、打包、部署,而後獲得最終的產品
持續集成 (CI)與Maven?
CI強調項目以很短的週期 (如15分鐘) 集成最新的代碼。實際上,CI的前提是源碼管理系統和構建系統。目前業界流行的CI服務器如Hudson和 CruiseControl都能很好地和Maven進行集成。也就是說,使用Maven後,持續集成會變得更加方便
富有信息的工做區是指?
這條實踐強調開發者可以快速方便地瞭解到項目的最新狀態。固然,Maven並不會幫你把測試覆蓋率報告貼到牆上,也不會在你的工做臺上放個鴨子告訴你構建失敗。不過使用Maven發佈的項目報告站點,並配置你須要的項目報告,如測試覆蓋率報告,都能幫你把信息推送到開發者眼前
什麼是持續集成CI?
源碼管理系統是什麼?
CI服務器是什麼?
Hudson和CruiseControl都有什麼特色?
Maven在傳統的瀑布模式開發中的應用
在傳統的瀑布模型開發中,項目依次要經歷需求開發、分析、設計、編碼、測試和集成發佈階段。從設計和編碼階段開始,就可使用Maven來創建項目的構建系統,在設計階段,也萬千能夠針對設計開發測試用例,而後再編寫代碼來知足這些測試用例。然而,有了自動化構建系統,咱們能夠節省不少手動的測試時間。此外,儘早地使用構建系統集成團隊的代碼,對項目也是百利而無一害,最後,Maven還能幫助咱們快速地發佈項目
被罵怎麼了?
C++之父 Bjarne Stroustrup 說過一句話: "只有兩類計算機語言,一類語言每天被人罵,還有一類沒人用。"固然這話也不全對,大紅大紫的Ruby不只有人用,並且罵的人也少,用戶最多的Java獲得的罵聲就不絕於耳了。Maven的用戶也很多
Maven受到了哪些質疑?
1、Maven對於IDE (如Eclipse和IDEA) 的支持較差,bug多,並且不穩定
2、Maven採用了一個糟糕的插件系統來執行構建,新的、破損的插件會讓你的構建莫名其妙地失敗
3、Maven過於複雜,它就是構建系統的EJB 2
4、Maven的倉庫十分混亂,當沒法從倉庫中獲得須要的類庫時,我須要手工下載複製到本地倉庫中
5、缺少文檔是理解和使用Maven的一個主要障礙
質疑1?
1、相對於JUnit和Ant來講,Maven比較年輕,IDE集成等衍生產品還不夠前面和成熟
2、可是,使用Maven最高效的方式永遠是命令行,IDE在自動化構建方面有天生的缺陷
3、Eclipse的Maven插件m2eclipse是一個比較優秀和成熟的工具,NetBeans也在積極地爲更好得集成Maven而努力,自IntelliJ IDEA開源後,也有望看到其對Maven更好的集成
質疑2?
自Maven2.0.9開始,全部核心的插件都設定了穩定版本,這意味着平常使用Maven時幾乎不會受到不穩定插件影響。此外,Maven社區也提倡爲你使用的任何插件設定穩定版本,若是咱們有好的實踐不採納,遇到了問題就抱怨,未免不夠公允。從Maven 3開始,若是你使用插件時未設定版本,會看到警告信息
質疑3?
不要期望Maven十分簡單,這幾乎是不可能的。Maven是用來管理項目的、清理、編譯、測試、打包、發佈,以及一些自定義的過程自己就是一件複雜的事情。目前在Java社區還有比Maven更強大、更簡單的構建工具嗎?答案是否認的,咱們能夠嘗試去幫助Maven讓它變得更簡單,而不是拋棄它,而後本身實現一套更加複雜的構建系統
質疑4?
Maven的中央倉庫確實不完美,你也許會發現某個jar包出如今兩個不一樣的路徑下,這不是Maven的錯,這是開源項目自己改變了自身的座標,若是沒有中央倉庫,你將不得不去開源項目首頁尋找下載連接,這不是更費事嗎?如今有不少的Maven倉庫搜索服務。沒法從中央倉庫找到你須要的類庫?因爲許可證等因素,這是徹底由可能,這時你須要作的時創建一個組織內部的倉庫服務器,你會發現這會給你帶來許多意想不到的好處
質疑5?
這是事實,Maven官方站點的文檔十分凌亂,各類插件的文檔更是須要費力尋找。Sonatype編寫的《Maven權威指南》和許總編寫的《Maven實戰》能夠幫助你們理解和使用Maven