- 輕量級Java EE企業應用開發實戰
- 柳偉衛編著
- 1568字
- 2022-07-29 14:31:14
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!
- 數據科學實戰手冊(R+Python)
- 精通Nginx(第2版)
- 案例式C語言程序設計
- Arduino by Example
- Learning Bayesian Models with R
- Linux環境編程:從應用到內核
- Haxe Game Development Essentials
- Node.js:來一打 C++ 擴展
- Learning Apache Cassandra
- AutoCAD 2009實訓指導
- 零基礎學C語言第2版
- uni-app跨平臺開發與應用從入門到實踐
- Learning Nessus for Penetration Testing
- Photoshop智能手機APP界面設計
- 深入淺出Python數據分析