一起學Maven(初識Maven)

開場白

    在現在的項目開發過程中,越來越重視項目的管理,而且主流的項目管理框架或者說是工具已經慢慢被Maven取代,在求職者面試過程中,項目開發過程中,Maven的使用已經成爲主流,如何很快着手Maven的項目管理,已經成爲包括我在內的很多程序員考慮的問題,在本系列博文中,我將以一個初識Maven的角度和大家共同學習Maven的項目構建工具的使用,在這個過程中,有可能有很多問題,也或許有很多我沒有考慮到的地方,還請高手給予指正,當然,如果是新入手的學者,也可以在實驗過程中給出想法和建議,在此感激不盡。下面進入Maven的學習之路。

什麼是Maven?

    Maven是基於項目對象模型(POM),可以通過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。類似於大家熟知的Ant工具所起到的效果,當然他們之間存在很多異同點。

爲什麼要學Maven?

    大家會發現,在平時項目中,我們每天有相當一部分時間花在了編譯、運行單元測試、生成文檔、打包和部署等煩瑣且不起眼的工作上,如果你使用Ant,會發現很多東西都要程序員去定義,去編寫build文件,然而有了Maven這個構建工具,能夠幫我們自動化構建過程,從清理、編譯、測試到生成報告,再到打包和部署。我們不需要也不應該一遍又一遍地輸入命令,一次又一次地點擊鼠標,或者小心翼翼的寫着配置文件,我們要做的是使用Maven配置好項目,然後輸入簡單的命令(如mvn clean install),Maven會幫我們處理那些煩瑣的任務。這一切都體現了一句經典“約定優於配置”,當然Maven不僅是構建工具,還是一個依賴管理工具和項目信息管理工具,況且Maven也是跨平臺的。這些都會通過實例說明。

獲取和安裝

    下載地址:http://maven.apache.org/download.cgi,進去之後,會發現有很多版本,我們將使用較新的版本apache-maven-3.1.1-bin.zip,  (windows平臺)如圖1所示:


      圖1

    如果想查看源碼可以下載src版本,當然也可以選擇其他操作系統,比如linux平臺下的文件,本系列只介紹windows平臺下,其他平臺還請參照其他博文講解。

找到下載後的文件,並將文件解壓到一個自己定義的目錄,如圖2所示:


                  圖2

    此時發現有四個目錄,下面講解四個目錄中文件的作用

    bin目錄:

    該目錄包含了mvn運行的腳本,這些腳本用來配置java命令,準備好classpath和相關的java系統屬性,然後執行java命令

    boot目錄:

    該目錄只包含一個文件,該文件爲plexus-classworlds-xxx.jar。plexus-classworlds是一個類加載器框架,相對於默認的java類加載器,它提供了更豐富的語法以方便配置,maven使用該框架加載自己的類庫。

    conf目錄:

    該目錄包含了一個非常重要的文件settings.xml。直接修改該文件,就能在機器上全局地定製maven的行爲。一般情況下,我們更偏向於複製該文件至~/.m2/目錄下(~表示用戶目錄),然後修改該文件,在用戶範圍定製maven的行爲。

    lib目錄:

    該目錄包含了所有maven運行時需要的java類庫。

環境變量的配置

    打開系統屬性(桌面上右鍵單擊“我的電腦”→“屬性”),點擊高級系統設置,再點擊環境變量,在系統變量中新建一個變量,變量名爲M2_HOME,變量值爲Maven的安裝目錄E:\StudySoftware\javaEE\apache-maven-3.1.1(根據自己安裝的情況)。點擊確定,接着在系統變量中找到一個名爲Path的變量,在變量值的末尾加上%M2_HOME%\bin;,注意多個值之間需要有分號隔開,然後點擊確定。至此,環境變量設置完成,詳細情況如圖3所示:


                           圖3

    下面將查看配置是否正確,打開命令控制檯,輸入mvn -v如果發現圖4所示的信息,配置就是成功的:


                        圖4

    至此,Maven的環境變量配置成功。

本地倉庫

由於運行過mvn命令,那麼會在用戶目錄下發現一個.m2文件,如圖5所示:


                       圖5
    其中repository目錄,這個目錄是存放從網上下載下來的jar,而這些jar就是maven的好處之一,可以自動下載項目中用到的jar包,而這些jar包的存放位置就是一個倉庫,存放在本地的就是本地倉庫,而存放在網絡上的就是maven的中央倉庫。

    由於下載jar文件的增多,會給C盤造成負擔,或者在重裝系統後,c盤的東西將不復存在,因此可以把repository目錄轉移到其他盤中儲存。

具體做法是:

1. 複製repository目錄到其它盤符,本文中是在E:\Workspaces\Maven下

2. 複製剛剛解壓好的Maven目錄中,conf中的settings.xml文件到E:\Workspaces\Maven目錄下,

3. 打開找到如下內容

<localRepository>....</localRepository>
改成:

<localRepository>E:/Workspaces/Maven/repository</localRepository>

同樣將conf下的settings.xml也改成如上配置,如圖6所示:



                       圖6

保存.完成.

這樣就將本地倉庫從C:\Users\Steven\.m2\repository移到了E:\Workspaces\Maven\repository中。

Maven小實例

本文在目錄E:\Workspaces\STSWorkspace\Maven_01(可以隨便找個目錄)下,新建pom.xml文件,然後在其中加入如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<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.steven.maven</groupId>
    <artifactId>maven_01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</project>
其中

    groupId:

    項目或者組織的唯一標誌,並且配置時生成路徑也是由此生成,如com.steven.maven生成的相對路徑爲:/com/steven/maven
    artifactId:

    項目的通用名稱
    version:

    項目的版本
    接下來在此文件夾中建立src文件夾,然後在src中建立main和test文件夾,然後在main中建立java文件夾,然後在java文件夾中建立com/steven/maven/HelloWorld.java文件,如圖7所示:


                         圖7

HelloWorld.java的內容如下:

package com.steven.maven;

public class HelloWorld{
	public void sayHello(){
		System.out.println("Hello Maven!");
	}
}
然後在命令控制檯中執行mvn compile,如圖8所示:


                          圖8

    會發現出現Downloading下載的提示,這是因爲,Maven在執行命令的時候,要加載其他使用到的插件和其他jar包,稱爲依賴,這個時候就要從網絡上進行下載,所以如何使用Maven,請保持網絡是正常的,否則會出現問題。當編譯完成的時候出現成功的提示信息,如圖9所示:


                      圖9

此時發現項目目錄中多了一個target的目錄,如圖10所示:


                     圖10

    發現剛剛編譯產生的class文件放在了target目錄下,所以只要我們按照這個目錄格式編寫,maven工具就幫助我們執行出結果,然後放在相應的結構目錄下。

    下面我們將繼續編寫測試代碼,在test目錄下新建java文件夾,然後同樣新建com/steven/maven/HelloWorldTest.java文件,其中HelloWorldTest文件的內容如下:

package com.steven.maven;
import org.junit.*;
public class HelloWorldTest{
	@Test
	public void sayHelloTest(){
		HelloWorld hw = new HelloWorld();
		hw.sayHello();
	}
}

此時的目錄結構如圖11所示:


                       圖11

然後控制檯執行mvn test命令,但此時出現錯誤信息,如圖12所示:


                      圖12

這是因爲測試過程中用到了junit的包,但沒有找到,原來的解決辦法是:

  • 通過將junit的包加入到環境變量下即可解決

但maven的解決思路是

  • 在pom.xml中加入<dependencies>節點,完成的配置文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<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.steven.maven</groupId>
    <artifactId>maven_01</artifactId>
    <version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
		</dependency>
	</dependencies>
</project>
    <dependencies>節點代表項目依賴的jar包,然後加入junit的jar包配置文件即可,此時再次執行mvn test,會發現如圖13所示的結果:


                       圖13

    這時候maven從網絡上下載4.10版本的junit jar包,最後的執行結果如圖14所示:


                      圖14

    此時發現測試成功,正確執行Hello Maven!的結果。

    此時再來看target中的文件會發現如圖15所示的結果:


                      圖15

    如果此時執行mvn clean命令,如圖16所示:


                      圖16

    會發現在下載相應插件的同時,執行了清除target目錄的操作,然後再來看Maven_01目錄中的文件,如圖17所示:


                          圖17

發現target目錄已經不存在了,即被maven clean命令清空了。如果接着執行maven test,會發現target目錄又出現了。

    這個時候再來觀察一下一開始配置的本地倉庫中的文件,會發現圖18的結果:


                           圖18

我們發現,Maven在執行命令的過程中用到的jar都已經在本地倉庫中儲藏了,至此,Maven小實例結束。

總結

    在本節中,通過Maven的介紹,下載,安裝,配置,已經小實例的實現,估計大家也多多少少有些頭緒了,通過實例,可以看出Maven可以作爲項目的構建工具,而配置文件很好寫,而且寫的很少,用到的jar包,不需要手動去添加到環境變量中,只要通過配置,Maven就會通過網絡尋找到並且下載到本地倉庫中。

    在本節中用到的Maven命令:

    mvn compile編譯java文件

    mvn test執行junit操作

    mvn clean清空target目錄操作

    在此恭祝大家學習愉快!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章