1. 程式人生 > >Apache Maven入門(上)

Apache Maven入門(上)

寫這個 maven 的入門篇是因為之前在一個開發者會的動手實驗中發現挺多人對於 maven 不是那麼瞭解,所以就有了這個想法。
這個入門篇分上下兩篇。本文著重動手,用 maven 來構建執行 hellow world 程式,體會一下不用任何 IDE ,只用 maven 是咋回事。然後下篇就講解一下 maven 的核心概念。寫這兩篇文章特意迴避了複雜的示例,也不使用 IDE ,目的是排除干擾,著重於 maven 本身。

本文的原始碼可從這裡下載。  

Apache Maven 是做什麼用的?


Maven 是一個專案管理和構建自動化工具。但是對於我們程式設計師來說,我們最關心的是它的專案構建功能。所以這裡我們介紹的就是怎樣用 maven 來滿足我們專案的日常需要。
Maven 使用慣例優於配置的原則 。它要求在沒有定製之前,所有的專案都有如下的結構:
 

目錄

目的

${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 下面。
這時有人會說了 , Ant 就沒有那麼多要求 ,它允許你可以自由的定義專案的結構。在這裡不想引起口水戰哈, 我個人覺得 maven 的這些預設定義很方便使用。 
好了 ,接下來我們來安裝 maven 。

Maven 的安裝


安裝完成後,在命令列執行下面的命令:  

   

$ mvn -v 
Apache Maven 3.0.3 (r1075438; 2011-03-01 01:31:09+0800)
Maven home: /home/limin/bin/maven3
Java version: 1.6.0_24, vendor: Sun Microsystems Inc.
Java home: /home/limin/bin/jdk1.6.0_24/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.35-28-generic-pae", arch: "i386", family: "unix"


如果你看到類似上面的輸出的話,就說明安裝成功了。
接下來我們用 maven 來建立最著名的“Hello World!”程式 :)
注意:如果你是第一次執行 maven,你需要 Internet 連線,因為 maven 需要從網上下載需要的外掛。
我們要做的第一步是建立一個 maven 專案。在 maven 中,我們是執行 maven 目標 (goal) 來做事情的。
maven 目標和 ant 的 target 差不多。在命令列中執行下面的命令來建立我們的 hello world 專案

  ~$mvn archetype:generate -DgroupId=com.mycompany.helloworld -DartifactId=helloworld -Dpackage=com.mycompany.helloworld -Dversion=1.0-SNAPSHOT


archetype:generate 目標會列出一系列的 archetype 讓你選擇。 Archetype 可以理解成專案的模型。 Maven 為我們提供了很多種的專案模型,包括從簡單的 Swing 到複雜的 Web 應用。我們選擇預設的 maven-archetype-quickstart ,是編號 #106 ,如下圖所示:

 
apache maven image1

 連打兩個回車,這時候讓你確定專案屬性的配置,

 
apache maven image2

這些屬性是我們在命令列中用 -D 選項指定的。該選項使用 -Dname=value 的格式。回車確認,就完成了專案的建立,如下圖所示:

 
apache maven image3

這時候我們看一下 maven 給我們建立的檔案目錄結構:



maven 的 archetype 外掛建立了一個 helloworld 目錄,這個名字來自 artifactId 。在這個目錄下面,有一個 Project Object Model(POM) 檔案 pom.xml 。這個檔案用於描述專案,配置外掛和管理依賴關係。
原始碼和資原始檔放在 src/main 下面,而測試程式碼和資源放在 src/test 下面。

Maven 已經為我們建立了一個 App.java 檔案:

Java程式碼

    package com.mycompany.helloworld;   
    
    /**  
     * Hello world!  
     *  
     */
    publicclass App {   

    
        publicstaticvoid main( String[] args ) {   
            System.out.println( "Hello World!" );   
        }   
    }  

 正是我們需要的 Hello World 程式碼。所以我們可以構建和執行這個程式了。用下面簡單的命令構建:

~$cd helloworld

~$mvn package 

當你第一次執行 maven 的時候,它會從網上的 maven 庫 (repository) 下載需要的程式,存放在你電腦的本地庫 (local repository) 中,所以這個時候你需要有 Internet 連線。Maven 預設的本地庫是 ~/.m2/repository/ ,在 Windows 下是 %USER_HOME%\.m2\repository\ 。

 apache maven image5

 如果構建沒有錯誤的話,就會得到類似下面的結果:

 
apache maven image6

 這個時候, 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.mycompany.helloworld.App

apache maven image8

 
執行成功!!

 
現在你可能會有不少的問題。所以下一篇文章會解釋 maven 的核心概念,希望能回答你可能會有的一些疑問。