官术网_书友最值得收藏!

2.1 Maven概述

Maven是Apache基金會下的一個子項目,意為“知識的積累者”,旨在用一種標準的方式來構建項目,明確定義項目的組成部分,通過一種簡便的方法來發布項目信息,以及實現在多個項目中共享JAR。

Maven可以用于構建和管理任何基于Java項目的工具,可以使Java開發人員的日常工作更加輕松,并且通常有助于理解任何基于Java的項目。

與Maven類似的工具有Ant、Gradle等。

2.1.1 Maven的主要功能

Maven的主要目標是允許開發人員在最短的時間內理解開發工作的完整狀態。為了實現此目標,Maven嘗試解決以下幾個方面的問題:

1.簡化構建過程

雖然使用Maven并不能消除對底層機制的了解,但Maven確實為細節提供了很多保護。

2.提供統一的構建系統

Maven允許項目使用其項目對象模型進行構建,并且使用Maven的所有項目共享一組插件,從而提供統一的構建系統。一旦熟悉了一個Maven項目的構建方式,就會自動知道所有Maven項目的構建方式,從而在嘗試瀏覽多個項目時節省大量時間。

3.提供優質的項目信息

Maven提供了大量有用的項目信息,這些信息部分是從POM中獲取的,部分是從項目的來源中生成的。例如,Maven可以提供:

  • 更改直接從源代碼管理創建的日志文檔。
  • 交叉引用來源。
  • 項目管理的郵件列表清單。
  • 依賴清單。
  • 單元測試報告,包括覆蓋率。

隨著Maven的改進,所提供的信息集將得到改善,所有這些信息對Maven的用戶都是透明的。

其他產品還可以提供Maven插件,以允許其項目信息集以及Maven給出一些標準信息,而這些信息仍然基于POM。

4.提供最佳實踐開發指南

Maven的目的是收集當前最佳實踐開發的原則,并使其易于朝著這個方向指導項目。

例如,單元測試的規范、執行和報告是使用Maven的常規構建周期的一部分。當前的單元測試較佳實踐被用作準則:

  • 將測試源代碼保存在單獨但并行的源樹中。
  • 使用測試用例命名約定來定位和執行測試。
  • 讓測試用例設置其環境,而不是依賴于自定義構建以進行測試準備。

Maven旨在協助項目工作流程,例如發布和問題管理。

Maven還建議了一些有關如何布局項目目錄結構的準則。了解布局之后,就可以輕松導航使用Maven和相同默認值的任何其他項目。

5.允許透明遷移到新功能

Maven為Maven客戶端提供了一種輕松的方式來更新其安裝,以便可以利用對Maven本身所做的任何更改。

因此,從第三方或Maven本身安裝新的或更新的插件變得很簡單。

2.1.2 創建Maven項目

在工作目錄中執行以下命令,即可創建一個Maven項目:

上述命令含義如下:

  • archetype:generate用于創建工程架構的原型。
  • groupId指定了新建項目的工程名。
  • artifactId指定了創建的項目名稱。
  • archetypeArtifactId指定了創建工程架構的原型的名稱。
  • archetypeVersion指定了創建工程架構的原型的版本。
  • interactiveMode設置了交互模式。

看到如下控制臺輸出的內容,說明已經執行成功了:

在工作目錄下可以看到一個hello-world文件夾,該文件夾就是我們剛剛創建的Maven項目。

2.1.3 探索Maven項目

新建的hello-world項目結構如下:

hello-world項目根目錄下是一個名為pom.xml的POM文件。

hello-world項目根目錄下的src是指項目的源碼。源碼包括兩部分,main目錄下就是平時開發的功能代碼;而test目錄下則用于放置測試代碼。至于為什么Maven使用這些目錄,可以看后續2.3節的內容。

1.pom.xml

pom.xml的內容如下:

上述文件中:

  • <groupId>和<artifactId>的含義與mvn archetype:generate中的參數groupId和artifactId的含義相同。
  • <properties>用于配置項目的屬性。
  • <dependencies>用于配置項目的依賴。
  • <pluginManagement>用于項目的插件管理。

有關POM的內容會在2.3節詳細講解。

2.App.java

App.java是項目的業務功能代碼,內容如下:

上述業務較為簡單,運行程序后,會打印“Hello World!”字樣的內容。

3.AppTest.java

AppTest.java是測試用例代碼,內容如下:

上述測試較為簡單,運行測試用例后,assertTrue方法會判斷輸入變量是否為true。

2.1.4 構建Maven項目

執行“mvn package”命令來構建Maven項目,命令行將打印出各種操作,并以以下內容結束:

命令中的“package”是Maven中的一個階段。階段是構建Maven生命周期中的一個步驟。當給出一個階段時,Maven將執行指定階段之前的所有階段。例如,如果我們執行compile階段,那么實際執行的階段為:

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources
  • compile

有關Maven階段的內容將在后續章節中介紹。

通過上述命令會在項目的target目錄下生成一個新編譯和打包的JAR文件。可以使用以下命令測試該JAR文件:

    java -cp target/hello-world-1.0-SNAPSHOT.jar com.waylau.java.App

控制臺輸出如下:

    Hello World!
主站蜘蛛池模板: 思茅市| 华安县| 定州市| 犍为县| 育儿| 芒康县| 华坪县| 水富县| 肇州县| 炉霍县| 新河县| 抚顺市| 芦山县| 农安县| 静海县| 仁化县| 张北县| 三亚市| 榆树市| 珲春市| 元谋县| 武安市| 灌云县| 临湘市| 都兰县| 耒阳市| 奇台县| 洪洞县| 莱芜市| 舞钢市| 景德镇市| 中宁县| 新乐市| 新竹市| 民丰县| 张掖市| 金昌市| 大同市| 家居| 旺苍县| 金塔县|