關於Maven

  1、What is Maven?web

  Maven,意第緒語,意爲知識的積累者,最初用於一個叫 Jakarta Turbine的項目中來簡化構建過程。apache

  實際的項目開發中,咱們須要的是——項目構建的標準方法、關於項目組成的清晰定義、發佈項目信息的簡單方法以及多個項目間共享jar的方法。閉包

  這些需求推進的結果即是Maven,它可用於構建和管理基於Java的項目。maven

 

  如下來自百度百科,更通俗點:ide

  Maven是一個項目管理工具,它包含了一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命週期階段(phase)中插件(plugin)目標(goal)的邏輯。當你使用Maven的時候,你用一個明肯定義的項目對象模型來描述你的項目,而後Maven能夠應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。

 

  Maven 有一個生命週期,當你運行 mvn install 的時候被調用。這條命令告訴 Maven 執行一系列的有序的步驟,直到到達你指定的生命週期。遍歷生命週期旅途中的一個影響就是,Maven 運行了許多默認的插件目標,這些目標完成了像編譯和建立一個 JAR 文件這樣的工做。

 

  此外,Maven可以很方便的幫你管理項目報告,生成站點,管理JAR文件,等等。
 
  那麼,Maven 和 Ant 有什麼不一樣呢?
  在回答這個問題之前,首先要強調一點:Maven 和 Ant 針對構建問題的兩個不一樣方面。
  Ant 爲 Java 技術開發項目提供跨平臺構建任務。Maven 自己描述項目的高級方面,它從 Ant 借用了絕大多數構建任務。所以,Maven 和 Ant表明兩個差別很大的工具。

 

 

  2、Maven的目標工具

  Maven的主要目標是讓開發人員在最短的時間內理解開發工做的完整狀態。佈局

  爲了實現這一目標,Maven試圖處理如下幾個方面的問題:單元測試

  • Making the build process easy
  • Providing a uniform build system
  • Providing quality project information
  • Providing guidelines for best practices development
  • Allowing transparent migration to new features

  2.1  Making the build process easy測試

  雖然使用Maven並不能消除對底層機制的瞭解,但Maven確實提供了許多屏蔽細節的功能。網站

 

  2.2  Providing a uniform build system

  Maven容許使用項目對象模型(project object model, POM)和全部使用Maven的項目共享的一組插件來構建項目.

  一旦您熟悉了一個Maven項目是如何構建的,您就會自動知道全部Maven項目是如何構建的,從而在嘗試應對多個項目時節省了大量時間。

  

  2.3   Providing quality project information

  Maven提供了大量有用的項目信息,這些信息一部分來自POM,一部分來自項目的源代碼。

  例如,Maven能夠提供:

  • Change log document created directly from source control(更改直接從源代碼控件建立的日誌文檔)
  • Cross referenced sources (交叉引用的來源)
  • Mailing lists
  • Dependency list
  • Unit test reports including coverage(單元測試報告,包括覆蓋率)

  隨着Maven的改進,提供的信息集也會改進,全部這些信息集對Maven的用戶都是透明的。

  其餘產品還能夠提供Maven插件,容許它們的項目信息集與Maven提供的一些標準信息一塊兒使用,這些信息仍然基於POM。

 

  2.4   Providing guidelines for best practices development

  Maven的目標是爲最佳實踐開發收集當前的原則,並使項目更容易朝着這個方向進行指導.

  例如,規範、執行和單元測試報告是使用Maven的正常構建週期的一部分。當前的單元測試最佳實踐被用做指南:

  • keeping your test source code in a separate, but parallel source tree
  • Using test case naming conventions to locate and execute tests
  • Have test cases setup their environment and don’t rely on customizing the build for test preparation.

  

  Maven還旨在協助項目工做流程,如發佈和問題管理。

  Maven還建議了一些關於如何佈局項目目錄結構的指導原則,這樣一旦您瞭解了佈局,就能夠輕鬆地導航使用Maven和相同缺省值的任何其餘項目。

 

  2.5  Allowing transparent migration to new features

  Maven爲Maven客戶提供了一個簡單的方法來更新他們的安裝,這樣他們就能夠利用對Maven自己的任何更改。

  因爲這個緣由,從第三方或Maven自己安裝新的或更新的插件變得微不足道。

 

  3、What is Maven Not?

  關於Maven,您可能據說過如下一些事情:

  • Maven is a site and documentation tool
  • Maven extends Ant to let you download dependencies
  • Maven is a set of reusable Ant scriptlets

  Maven確實能夠作這些事情,正如您在「什麼是Maven?」章節中讀到的,但Maven不只具備這些特性,並且它的目標也很是不一樣。

  

  Maven確實鼓勵最佳實踐,但咱們意識到,出於歷史緣由,一些項目可能不適合當前的這些理念。

  雖然Maven是被設計得很靈活,可是在某種程度上,在這些狀況下以及在不一樣項目的須要下,它不可能在不考慮目標完整性的狀況下知足每種狀況。

  若是您決定使用Maven,而且有一個不尋常的沒法從新組織的構建結構,那麼您可能不得不徹底忘記某些特性或Maven的使用。

 

  4、Maven的主要特性

  一下是Maven的主要特性:

 

  • Simple project setup that follows best practices - get a new project or module started in seconds
  • 遵循最佳實踐的簡單項目設置-在幾秒鐘內啓動一個新項目或模塊

 

  • Consistent usage across all projects - means no ramp up time for new developers coming onto a project
  • 跨全部項目的一導致用——意味着新開發人員進入項目時沒有時間增長

 

  • Superior dependency management including automatic updating, dependency closures (also known as transitive dependencies)
  • 高級依賴項管理,包括自動更新、依賴項閉包(也稱爲傳遞依賴項)

 

  • Able to easily work with multiple projects at the same time
  • 可以同時處理多個項目

 

  • large and growing repository of libraries and metadata to use out of the box, and arrangements in place with the largest Open Source projects for real-time availability of their latest releases
  • 一個大型且不斷增加的庫和元數據存儲庫,用於開箱即用,並與最大的開放源碼項目一塊兒安排最新版本的實時可用性

 

  • Extensible, with the ability to easily write plugins in Java or scripting languages
  • 可擴展,可以輕鬆地用Java或腳本語言編寫插件

 

  • Instant access to new features with little or no extra configuration
  • 即時訪問新功能,不多或沒有額外的配置

 

  • Ant tasks for dependency management and deployment outside of Maven
  • 用於依賴關係管理和Maven外部部署的Ant任務

 

  • Model based builds: Maven is able to build any number of projects into predefined output types such as a JAR, WAR, or distribution based on metadata about the project, without the need to do any scripting in most cases.
  • 基於模型的構建:Maven可以將任意數量的項目構建爲預約義的輸出類型,例如基於項目元數據的JAR、WAR或分發,在大多數狀況下不須要執行任何腳本。

 

  • Coherent site of project information: Using the same metadata as for the build process, Maven is able to generate a web site or PDF including any documentation you care to add, and adds to that standard reports about the state of development of the project. Examples of this information can be seen at the bottom of the left-hand navigation of this site under the "Project Information" and "Project Reports" submenus.
  • 一致的項目信息站點:使用與構建過程相同的元數據,Maven可以生成web站點或PDF,其中包括您想要添加的任何文檔,並向該標準報告添加關於項目開發狀態的報告。這些信息的例子能夠在「項目信息」和「項目報告」子菜單下本網站左側導航的底部看到。

 

  • Release management and distribution publication: Without much additional configuration, Maven will integrate with your source control system (such as Subversion or Git) and manage the release of a project based on a certain tag. It can also publish this to a distribution location for use by other projects. Maven is able to publish individual outputs such as a JAR, an archive including other dependencies and documentation, or as a source distribution.
  • 發佈管理和發行版發佈:無需太多額外配置,Maven就能夠與源代碼控制系統(如Subversion或Git)集成,並基於某個標記管理項目的發佈。它還能夠將其發佈到發佈位置,供其餘項目使用。Maven可以發佈單獨的輸出,例如JAR、包含其餘依賴項和文檔的存檔,或者做爲源發佈。

 

  • Dependency management: Maven encourages the use of a central repository of JARs and other dependencies. Maven comes with a mechanism that your project's clients can use to download any JARs required for building your project from a central JAR repository much like Perl's CPAN. This allows users of Maven to reuse JARs across projects and encourages communication between projects to ensure that backward compatibility issues are dealt with.
  • 依賴關係管理:Maven鼓勵使用jar和其餘依賴關係的中央存儲庫。Maven提供了一種機制,您的項目客戶端可使用該機制從中央JAR存儲庫(很是相似於Perl的CPAN)下載構建項目所需的任何JAR。這容許Maven的用戶跨項目重用jar,並鼓勵項目之間的通訊,以確保處理向後兼容性問題。
相關文章
相關標籤/搜索