Maven使用詳解
世間萬物相生相克,今年本來的目標是主要研究asp.net mvc以及windows平台相關的DI, ORM框架,突然有一天想研究一個Java EE里面相應的框架都是怎么玩的,於是研究了一下spring,后來發現spring相關的項目中,一般會使用主流的另一個框架,就是maven,相面我們從幾個方面簡單介紹一個這個框架,並附上詳細的使用步驟,希望這篇文章可以完全自包含,可以完整的引導初學者使用maven。
Maven是干什么用的
Maven 其實是很多東西,Maven是一個項目管理工具,它包含了一個項目對象模型 (Project Object Model),一組標准集合,一個項目生命周期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(goal)的邏輯。當你使用Maven的時候,你用一個明確定義的項目對象模型來描述你的項目,然后Maven可以應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。Maven 有一個生命周期,當你運行 mvn install 的時候被調用。這條命令告訴 Maven 執行一系列的有序的步驟,直到到達你指定的生命周期。遍歷生命周期旅途中的一個影響就是,Maven 運行了許多默認的插件目標,這些目標完成了像編譯和創建一個 JAR 文件這樣的工作。此外,Maven能夠很方便的幫你管理項目報告,生成站點,管理JAR文件,等等。
但是簡而言之,maven是把設計模式應用於構建架構的一種嘗試,如下列出了maven 的大部分功能。
-Builds
-Documentation
-Reporting
-Dependencies
-SCMs
-Releases
-Distribution.
另外相對於以前的Java構建工具ant, maven更簡潔,因為maven是基於約定的,就是說約定好的東西就不用配置了。Maven 和 Ant 針對構建問題的兩個不同方面。Ant 為 Java 技術開發項目提供跨平台構建任務。Maven 本身描述項目的高級方面,它從 Ant 借用了絕大多數構建任務
Maven的配置和基本使用
去官網下載maven安裝包,就像其他Java一樣,是一個綠色的包,下載后直接解壓並配置bin到path環境變量,就可以直接使用。由於maven使用Java所以測試前請檢查好JAVA_HOME已經配置到相應的Java安裝目錄,開啟控制台鍵入mvn –version會得到如下的結果表示配置成功。
-------------------------------------------------------------------
C:\Users\Dbg>mvn -version
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-1
7+08:00)
Maven home: C:\apache-maven-3.3.1\bin\..
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jre7
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
-------------------------------------------------------------------
創建第一個工程
C:\Users\Dbg>mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app
創建成功后會得到如下的目錄結構
my-app
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- mycompany
| `-- app
| `-- App.java
`-- test
`-- java
`-- com
`-- mycompany
`-- app
`-- AppTest.java
切換到my-app所在的目錄,執行如下命令編譯整個項目
C:\Users\Dbg>mvn compile
結果如下:
[INFO] ----------------------------------------------------------------------------
[INFO] Building Maven Quick Start Archetype
[INFO] task-segment: [compile]
[INFO] ----------------------------------------------------------------------------
[INFO] artifact org.apache.maven.plugins:maven-resources-plugin: \
checking for updates from central
[INFO] artifact org.apache.maven.plugins:maven-compiler-plugin: \
checking for updates from central
[INFO] [resources:resources]
[INFO] [compiler:compile]
Compiling 1 source file to <dir>/my-app/target/classes
[INFO] ----------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ----------------------------------------------------------------------------
[INFO] Total time: 3 minutes 54 seconds
[INFO] Finished at: Fri Sep 23 15:48:34 GMT-05:00 2005
[INFO] Final Memory: 2M/6M
[INFO] ----------------------------------------------------------------------------
編譯並運行unit test 代碼
C:\Users\Dbg>mvn test
[INFO] ----------------------------------------------------------------------------
[INFO] Building Maven Quick Start Archetype
[INFO] task-segment: [test]
[INFO] ----------------------------------------------------------------------------
[INFO] artifact org.apache.maven.plugins:maven-surefire-plugin: \
checking for updates from central
[INFO] [resources:resources]
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources]
[INFO] [compiler:testCompile]
Compiling 1 source file to C:\Test\Maven2\test\my-app\target\test-classes
[INFO] [surefire:test]
[INFO] Setting reports dir: C:\Test\Maven2\test\my-app\target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
[surefire] Running com.mycompany.app.AppTest
[surefire] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0 sec
Results :
[surefire] Tests run: 1, Failures: 0, Errors: 0
[INFO] ----------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ----------------------------------------------------------------------------
[INFO] Total time: 15 seconds
[INFO] Finished at: Thu Oct 06 08:12:17 MDT 2005
[INFO] Final Memory: 2M/8M
[INFO] ----------------------------------------------------------------------------
執行示例代碼
C:\Users\Dbg>mvn exec:java -Dexec.mainClass="com.mycompany.app.App"
會輸出’hello world!’