1. Maven的簡介
1.1 Maven 是什麼?
Maven是一個跨平臺的項目管理工具,它包含了一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命週期階段(phase)中插件(plugin)目標(goal)的邏輯。
Maven主要服務於基於Java平臺的項目構建、依賴管理和項目信息管理。
1.2 約定優於配置
|------------目錄-------------|--------------目的-------------|
|${basedir} |存放pom.xml和所有的子目錄 |
|${basedir}/src/main/java |項目的 java源代碼 |
|${basedir}/src/main/resources|項目的資源,比如說 property文件|
|${basedir}/src/test/java |項目的測試類,比如說 JUnit代碼 |
|${basedir}/src/test/resources|測試使用的資源 |
一個 Maven 項目在默認情況下會產生 JAR 文件,另外 ,編譯後 classes 會放在 ${basedir}/target/classes 下面, JAR 文件會放在 ${basedir}/target 下面。
1.3 Maven 的優點
(1)對第三方依賴庫進行統一的版本管理只要用了 Maven 就不用再爲每個項目複製jar了,Maven 會在你需要的時候,自動把這些第三方依賴庫找到,你需要編譯,Maven 就把這些jar包放到classpath裏,你需要打包,Maven 就幫你把需要的jar包都複製到WEB-INF/lib/目錄下。
(2)統一項目的目錄結構
可以保證所有項目的目錄結構都是一樣的,每個目錄起什麼作用都很清楚明瞭。
(3)統一軟件構建階段
Maven 把軟件開發的過程劃分成了幾個經典階段,比如你先要生成一些java代碼,再把這些代碼複製到特定位置,然後編譯代碼,複製需要放到 classpat 下的資源,再進行單元測試,單元測試都通過了才能進行打包,發佈。
以前使用Ant,最令人頭疼的就是要爲不同的項目寫很多build.xml腳本,而且這些腳本還不太通用,現在我們可以使用 Maven 提供的這些經典構建階段,讓每個項目就經過相同的步驟,從源代碼一步一步變成可以部署的成品。如果想要什麼附加功能,把對應的插件綁定到一個構建階段上,那麼到了執行這個構建階段的時候,就會執行綁定的插件了。
(4)測試驅動開發
測試是maven生命週期的最重要組成部分之一,並且Maven有現成的成熟插件支持業界流行的測試框架,如Junit和TestNG。
(5)快速構建
只需要一些配置,之後用一條簡單的命令就能讓Maven幫你清理、編譯、測試、打包、部署,然後得到最終產品。
2. Maven 的安裝與配置
在安裝 maven 前,先保證你安裝了JDK。2.1 Maven 下載
Maven官方下載地址:http://maven.apache.org/download.html當前最新版本:Maven 3.2.2
2.2 安裝
(1)Windows平臺a. 解壓發佈包(apache-maven-3.2.2-bin.zip),假定爲D:\apache-maven-3.2.2。
b. 添加M2_HOME的環境變量,設置變量的值爲D:\apache-maven-3.2.2。
c. 更新Path的環境變量,追加 %M2_HOME%\bin; 到Path的變量值上。
d. 可選,添加MAVEN_OPTS的環境變量,設置變量的值爲:-Xms256m -Xmx512m.
(2)在Linux平臺安裝
a. 解壓安裝
tar -xzvf apache-maven-3.2.2-bin.tar.gz -C /var/lib
b. 設置環境變量
打開/etc/profile,在文件最後添加#set maven environment
M2_HOME=/var/lib/apache-maven-3.2.2
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=$M2_HOME/bin:$PATH
c. 要使配置生效source /etc/profile
可參考http://maven.apache.org/download.html
2.3 檢測安裝是否成功
執行命令:mvn –version2.4 配置maven本地倉庫的路徑
本地倉庫默認是在${user.home}/.m2/repository目錄下,可通過修改%M2_HOME%\conf\setting.xml進行更改。打開%M2_HOME%\conf\setting.xml文件,在<settings>標籤下添加,<localRepository>/path/to/local/repo</localRepository>
3. 用Maven 命令創建一個簡單的Maven項目
3.1 構建一個簡單Maven項目
mvn archetype:generate -DgroupId=com.zing.helloworld -DartifactId=helloworld -Dpackage=com.zing.helloworld -Dversion=1.0-SNAPSHOT -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart
helloworld
|-- pom.xml
`-- src
|-- main
| |-- java
| | `-- com
| | `-- zing
| | `-- app
| | `-- App.java
| `-- resources
| `-- META-INF
| `-- application.properties
`-- test
`-- java
`-- com
`-- zing
`-- app
`-- AppTest.java
源代碼和資源文件放在 src/main 下面,而測試代碼和資源放在 src/test 下面。
3.2 查看pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zing.helloworld</groupId>
<artifactId>helloworld</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>helloworld</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
groupId, artifactId 和 version 這三個元素定義了一個項目基本的座標。
groupId 定義了項目屬於哪個組,這個組往往和項目所在的組織或公司存在關聯。
artifactId 定義了當前Maven項目在組織中唯一的ID, 可以理解爲項目中的模塊, 模塊爲Maven中最小單位構件。
version 項目的版本。
3.3 構建和運行程序
cd helloworld
mvn package
這個時候, maven 在 helloworld 下面建立了一個新的目錄 target/ ,構建打包後的 jar 文件 helloworld-1.0-SNAPSHOT.jar 就存放在這個目錄下。編譯後的 class 文件放在 target/classes/ 目錄下面,測試 class 文件放在 target/test-classes/ 目錄下面。
java -cp target/helloworld-1.0-SNAPSHOT.jar com.zing.helloworld.App