一、前言
早就知道maven 在java 項目的管理方面名聲顯赫,于是就想着學習掌握之,于是查閱了大量文檔。發現這些文檔的作者都是java 的大腕,大多都是站在掌握了一定maven 基礎的角度上進行介紹,讓我這初學者看的雲裡霧裡不知所雲。于是又去檢視maven 的官方網站,總算是有所了解,但一旦動手實際操作卻又霧裡看花。唉,沒辦法,就隻有一遍一遍的動手嘗試,經過種
種磨難總算是有一點眉目了。現在就将我的經驗寫出來,一來避免将來遺忘,二來也給和我一樣的菜鳥們提供一點點的友善。呵呵。本文的主題在于實用操作,個中原理還是麻煩大家去查一下java大腕們的文章吧。這裡推薦兩篇文章:
maven 2.0:編譯、測試、部署、運作
<a target="_blank" href="http://www.ideagrace.com/html/doc/2006/06/14/00847.html">http://www.ideagrace.com/html/doc/2006/06/14/00847.html</a>
maven2 的新特性
<a target="_blank" href="http://www-128.ibm.com/developerworks/cn/opensource/os-maven2/index.html">http://www-128.ibm.com/developerworks/cn/opensource/os-maven2/index.html</a>
二、maven2安裝
2、設定環境變量:maven2下載下傳完後,我将其解壓到我的計算機的d:/maven204下,目錄結構如下:
d:/
|--maven204
|-- bin
|-- conf
|-- core
|-- lib
|-- local
環境變量:(作業系統windows2003)
我的電腦----屬性----進階----環境變量,點選“系統變量”下的建立,輸入:變量名 maven_home; 變量值d:/maven204,在系統變量清單中找到系統變量path,打開之,在變量值中追加”;%maven_home%/bin”,至此環境變量設 置完畢。
檢查一下是否已經完成安裝,打開dos視窗,輸入mvn –v,如果出現以下資訊則表示maven2已經安裝成功:
x:〉mvn –v
maven version 2.0.4
我已經說得夠詳細了,還不行?那我隻能說你比我還菜。

三、用maven2建立第一個java工程
1、選擇一個根目錄,我的java工作目錄是d:/eclipse/workspace
2、打開dos視窗采用cd指令進入d:/eclipse/workspace目錄下
3、輸入下列指令
d:/eclipse/workspace>mvn archetype:create -dgroupid=com.efn -dartifactid=study
指令執行完畢會出現如下的目錄結構:
study
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- mycompany
| `-- app
| `-- app.java
`-- test
`-- java
`-- com
`-- mycompany
`-- app
`-- apptest.java
四、生成eclipse工程檔案
我采用的開發工具是eclipse,是以用maven的eclipse參數生成eclipse工程檔案。輸入如下
1、 采用dos的cd指令進入study目錄
2、 輸入指令:mvn eclipse:eclipse 如下所示:
d:/eclipse/workspace/study>mvn eclipse:eclipse
指令執行完畢後,發現多了兩個檔案:.classpath和.project
五、下載下傳maven的eclipse插件
1、打開eclipse
2、打開菜單 help -software updates-find and install
3、選擇第二項,進入下一步
4、點選按鈕“new remote site…”
ok,現在一切都是自動化的,你所需要做的就是等待并按提示按按鈕。
六、導入工程
剛才已經生成了eclipse的工程檔案,現在導入之。菜單file-import ,按“下一步”,選擇工程檔案導入完畢後,工程管理透視圖就會出現study節點了,在工程節點上,按滑鼠右鍵,打開彈出菜單,選擇maven2菜單項, 彈出子菜單->enable,點選之打開,在group id中輸入:study即可。
打開study的pom.xml檔案,會有如下類似内容:
xml 代碼
< modelversion > 4.0.0 </ modelversion >
< groupid > com.efn </ groupid >
< artifactid > study </ artifactid >
< packaging > jar </ packaging >
< version > 1.0-snapshot </ version >
< name > maven quick start archetype </ name >
</ project >
七、搭建架包
每一個java工程都不免使用第三方的架包,maven的好處就是可以統一管理這些架 包,并使多個java工程共享這些架包。我們所需要做的就是按規則編輯pom.xml檔案。maven已經非常智能,使用maven的eclipse插件 的向導,隻要輸入參數就可以将配置檔案生成出來。我們的例子是用jdbc方式通路oracle的資料庫。是以需要jdbc和oracle的架包的支援。下 面我們就來搭建這兩個架包到study工程裡來。
有兩種方式可以采用:
1、自動向導
第一種是采用向導方式并讓向導直接去maven的伺服器 上下載下傳你需要的架包,這種方式存在一定的風險,一來可能maven的伺服器上并沒有你需要的東東,二來每次智能的maven總是去尋找那并不存在的東東。 抛出一大堆紅字提示不說,達不到預期目标才是讓人郁悶。不過為了保證文檔的完整性,還是給出操作步驟。以junit為例(這個東東倒是沒有問題,呵呵)當 工程的maven被enable後,彈出菜單的maven2子菜,選擇子菜單的“add dependency”菜單項,在query中輸入“junit”,向導會自動列出相關清單供選擇。選擇你最需要的架包,按“ok”
按鈕。
如果你的本地倉庫已經存在該架包,則向導隻在pom.xml加入依賴項資訊,pom.xml檔案的内容如下
< modelversion > 4.0.0 </ modelversion >
< groupid > com.efn </ groupid >
< artifactid > study </ artifactid >
< packaging > jar </ packaging >
< version > 1.0-snapshot </ version >
< name > maven quick start archetype </ name >
< dependencies >
< dependency >
< groupid > junit </ groupid >
< artifactid > junit </ artifactid >
< version > 3.8.1 </ version >
</ dependency >
</ dependencies >
如果本地倉庫沒有,則向導會去maven的伺服器下載下傳架包,并在控制台輸出下載下傳日志如下:
06-8-4 上午09時21分07秒: local repository folder "" does not exist
06-8-4 上午09時21分11秒: reading /study/pom.xml
06-8-4 上午09時21分11秒: local repository folder "" does not exist
06-8-4 上午09時21分18秒: reading /study/pom.xml
06-8-4 上午09時21分18秒: local repository folder "" does not exist
06-8-4 上午09時21分19秒: reading /study/pom.xml
06-8-4 上午09時21分19秒: local repository folder "" does not exist
06-8-4 上午09時36分33秒: local repository folder "" does not exist
06-8-4 上午09時37分11秒: reading / study /pom.xml
06-8-4 上午09時37分11秒: local repository folder "" does not exist
06-8-4 上午09時37分15秒: local repository folder "" does not exist
06-8-4 上午09時40分07秒: local repository folder "" does not exist
06-8-4 上午09時40分08秒: reading / study /pom.xml
06-8-4 上午09時40分08秒: local repository folder "" does not exist
06-8-4 上午09時46分24秒: reading / study /pom.xml
06-8-4 上午09時46分24秒: local repository folder "" does not exist
06-8-4 上午09時46分28秒: local repository folder "" does not exist
06-8-4 上午09時46分40秒: local repository folder "" does not exist
06-8-4 上午09時46分47秒: local repository folder "" does not exist
06-8-4 上午09時46分47秒: reading / study /pom.xml
----------------------------------------------------------------
補充修正:如果出現錯誤提示同時你手頭也有架包的話可以采用maven的指令進行本地化安裝。比如我在安裝hibernate的架包時告訴我jta無法下載下傳。要求本地化安裝,給出的提示如下:
1) javax.transaction:jta:jar:1.0.1b
install it using the command:
mvn install:install-file -dgroupid=javax.transaction -dartifactid=jta / -dversion=1.0.1b -dpackaging=jar -dfile=/path/to/filepath to dependency:
1) com.efn:mywebapp:war:1.0-snapshot
2) org.hibernate:hibernate:jar:3.1rc2
3) javax.transaction:jta:jar:1.0.1b
----------
1 required artifact is missing.for artifact: com.efn:mywebapp-1.0-snapshot.war這個提示是說可以先到sun的網站下載下傳jta架包,然後采用指令行的方式按要求安 裝,因為我本來就有此架包,于是拷到一個友善的位置,比如c:/,然後在指令行下輸入:
mvn install:install-file -dgroupid=javax.transaction -dartifactid=jta -dversion=1.0.1b -dpackaging=jar -dfile=c:/jta.jar
執行完畢後,一切ok!
--------------------------------------------------------------
2、手工配置
手工配置比起自動化來說是麻煩了些,不過任何東東掌握在自己手裡總歸是吃飽喝足誰也不服了不是j。而且配置一次就可以受益終身。更重要的是能解決自動化完 成不了的任務。比如我現在要配置oracle的jdbc驅動,采用自動化就提示我下載下傳不了讓我改變下載下傳位址等等,真累。
算了還是自己來吧。
手工配置前還是先介紹一下相關背景知識。首先了解一下jar倉庫的概念,maven采用集中化的方式管理架包,凡用maven建構的java工程都可以重 用統一管理下的架包,是以必須有一個統一存放jar檔案的地方,這就是jar倉庫,不論是開發還是部署都會建立一個本地倉庫。這個倉庫的位置預設是 x:/documents and settings/administrator.lipeng/.m2/repository(x是你作業系統所在盤符)下,你可以修改配置檔案改變預設 的輸出位置。該配置檔案在maven目錄下的conf子目錄下。檔案名叫settings.xml。在配置檔案中加入如下節點資訊即可d:/repository。不過不建議改變,好像eclipse的maven插件隻認預設的輸出位置。我就是在這方面出了問題搞了半天才發現是輸出路徑的問題,也許是我還
沒有玩轉插件。誰要是解決此問題别忘了跟大家共享。
現在我們分析一下配置檔案pom.xml的結構,以junit為例,格式如下:
在來看看本地倉庫目錄結構
repository
`-- junit
|-- junit
| `-- 3.8.1
| `-- junit-3.8.1.jar
現在大家應該明白了吧,多餘的話不說啦。照葫蘆畫瓢就是。不過注意先建目錄後寫配置檔案,否則一旦儲存,智能的插件就馬上開始下載下傳了…
現在開始手動建立oracle的jdbc目錄并配置檔案,首先建立目錄結構如下:
`-- ojdbc
|-- ojdbc
| `-- 14
| `-- ojdbc-14.jar
如果你手頭的jar檔案名叫ojdbc14.jar,則改為ojdbc-14.jar,寫配置檔案:
< groupid > ojdbc </ groupid >
< artifactid > ojdbc </ artifactid >
< version > 14 </ version >
那麼現在一個完整的pom.xml檔案如下:
<? xml version = "1.0" ?>
< project >
< groupid > com.mycompany.app </ groupid >
< artifactid > myapp </ artifactid >
儲存之,則發現工程管理透視圖發生了一點變化,依此方法再加上jdbc的架包,現在可以開始寫程式了,建一個類并添加main函數,編寫程式如下:
java 代碼
public static void main( string[] args )
{
connection conn = null ;
preparedstatement ps = null ;
resultset rs = null ;
try {
class.forname( "oracle.jdbc.driver.oracledriver" );
conn = drivermanager.getconnection( "jdbc:oracle:thin:@(description=(ad dress_list=(address=(protocol=tcp)(port=1521)(host=192.168.0.240)))(connect_data=(se rver = dedicated)(service_name = db.efriendnet.com)))" , "efnx" , "efnx" );
ps = conn.preparestatement( "select * from tb_partyinfo" );
rs = ps.executequery();
while (rs.next())
system.out.println(rs.getstring( "topic" ));
}
} catch (exception e) {
system.out.print(e.getmessage());
finally
if (rs != null ) { try {rs.close();} catch (sqlexception e) {}}
if (ps != null ) { try {ps.close();} catch (sqlexception e) {}}
if (conn != null ) { try {conn.close();} catch (sqlexception e) {}}
}
别忘了import相應的包
八、編譯程式
采用maven建構系統,則編譯過程就獨立了出來。這時你再用eclipse自帶的編 譯工具就不起作用了。是以要想編譯、調試、運作還要做一些工作。以前是在dos指令行方式下進行編譯,現在的插件很好用,在eclipse配置一下就可以 編譯了。很友善。現在就做一個介紹。
eclipse有一個擴充工具就是用來內建其他建構工具的在工程的節點上點選滑鼠右鍵,選擇屬性,在“編譯”的右邊視窗選擇”建立”按鈕,在對話框的“name”中輸入:study,點選“browse workspace…”列出工程清單供選擇。
選擇完畢後,在goals中輸入package。别忘了apply.好了,讓我們run吧。如果一切正常,
控制台會打出maven的編譯資訊如下:
[info] ---------------------------------------------------------------------
[info] building maven quick start archetype
[info] task-segment: [package]
[info] resources:resources
[info] using default encoding to copy filtered resources.
[info] compiler:compile
[info] nothing to compile - all classes are up to date
[info] resources:testresources
[info] compiler:testcompile
[info] surefire:test
[info] surefire report directory: d:/eclipse/workspace/study/target/s
urefire-reports
-------------------------------------------------------
t e s t s
running com.efn.apptest
tests run: 1, failures: 0, errors: 0, skipped: 0, time elapsed: 0.157 sec
results :
tests run: 1, failures: 0, errors: 0, skipped: 0
[info] jar:jar
[info] building jar: d:/eclipse/workspace/study/target/study-1.0-snapshot.jar
[info] ----------------------------------------------------------------------------
[info] build successful
[info] total time: 4 second
[info] finished at: fri aug 04 10:55:42 cst 2006
[info] memory 2m/7m
[info] --------------------------------------------------------------------
注意,别忘了每一次程式改動完畢後都要經過這一步編譯。因為這是maven的編譯器!
九、調試程式
經過以上步驟我們已經完成了mave管理下的軟體生命周期,但是作為一個程式開發人員我們還要進行調試。這裡的調試設定和普通的java程式的調試是一樣的。
首先,打開debug對話框:
因為是一個一般的java應用程式,是以我們選擇 java application,點選“new”按鈕,輸入一些相應的參數,apply-debug
ok,一切正常!希望你也順利!