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 ,如下圖所示:
連打兩個回車,這時候讓你確定專案屬性的配置,
這些屬性是我們在命令列中用 -D 選項指定的。該選項使用 -Dname=value 的格式。回車確認,就完成了專案的建立,如下圖所示:
這時候我們看一下 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\ 。
如果構建沒有錯誤的話,就會得到類似下面的結果:
這個時候, 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
執行成功!!
現在你可能會有不少的問題。所以下一篇文章會解釋 maven 的核心概念,希望能回答你可能會有的一些疑問。