2007年7月29日 星期日

(2006.05月號--148期)開放原始碼專案管理工具_建立專案與IDE環境設定

在以往初步建立專案的過程中,多數傾向於二種方式,其一是依賴IDE,建立專案同時啟動專案精靈,顯示多個專案範本,藉由開發人員選擇範本的不同進行專案的初始化並建立符合需求的開發環境設定,並在IDE上進行建置、佈署、測試。這種方式的優點是方便、易學、無需了解複雜的環境配置即可進行。而缺點是受限於IDE的開發方式,只適用公司內部或單一公司實作的小型專案,也必須限制使用特定的IDE進行開發。對於大型或是多數委外進行開發的專案則不適用,因為我們無法強制委外的開發廠商使用統一的IDE進行開發。


其二是將專案建置邏輯撰寫於Ant 腳本中,由Ant協助進行程式碼的編譯、專案的佈署、單元測試、整合測試等的建置步驟。其優點是開發過程中完全不依賴IDE開發環境,因此在目前在大型的J2EE專案中幾乎都看的到Ant的蹤跡。而缺點是Ant的腳本並沒有一定的建置邏輯與規範,因此在目前業界中Ant腳本在各專案中可重覆使用的機率並不高,並且必須因應專案特性的不同而必須重寫或修改Ant的建置腳本,但在進行中大型專案裡維護Ant並不是件容易的事,而另一個缺點是Ant無法協助我們進行IDE環境的設定,因為充其量Ant只包含建置邏輯罷了。


在本期的內容中,筆者將為各位介紹Maven是如何協助我們從無到有建立出所需的專案開發環境,並且配合多個不同的IDE Plug-in協助我們建立EclipseJBuilderIntelliJ IDEAIDE開發環境的配置。

Maven Genapp Plugin

一般習慣使用IDE的開發人員,通常都是使用專案精靈工具,套用範本來建置專案。假若Maven專案的建置必須像Ant腳本一樣無中生有的自行撰寫的話,大概就不會有太多人嚐試用Maven進行開發了。而Maven Genapp Plugin如同專案精靈一樣,透過對話的方式,輔助我們建立新專案。


在開始實作之前,請先確認Maven環境中的Genapp Plugin的版本為何,但如何得知目前版本呢,可至[%MAVEN_HOME%/plugins]資料夾下查看是否有maven-genapp-plugin-x.x.jar或者在[${maven.home.local }/cache]下是否包含著maven-genapp-plugin-x.x的資料夾。我們可以從這二個地方即可得知目前版本訊息。至筆者截稿為止,版本為2.3,若讀者手上的版本稍舊的話,可透過執行maven plugin:download -DgroupId=maven -DartifactId=maven-genapp-plugin -Dversion=2.3進行下載更新。


為什麼要先確認Genapp的版本呢,其原因在於Maven在發展過程中有其建議的資料夾結構,參考資料結構 1,而在2.3之前版本中的專案範本,並沒有完全依照如此的資料夾結構進行設置。因此在建立出的專案中會與資料結構 1的格式稍有不同,但若不下載新版的maven-genapp-plugin也不影響往後專案的建置,因為Maven只建議開發人員,統一的資料夾結構對開發是有幫助的,若專案開發環境有自己的資料夾結構或是原先由Ant建置的專案欲移轉到Maven上進行開發,都可以依照專案原本的資料夾結構進行建置。


接下來參考圖 1執行maven genapp並依提示輸入,使用專案範本、專案根路徑名稱、專案ID、專案名稱、原始碼的Package名稱,當輸入完成後立即建置出所需的專案架構供開發人員進行下一步的開發。這樣的功能就如同IDE工具的專案精靈一樣方便,但有個問題,GenApp Plug-in究竟提供多少範本協助開發人員建置專案呢?這個部分可參考相關資源1GenApp官方網站,另外也可以直接查看[${maven.home.local }/cache/maven-genapp-plugin-2.2/plugin-resources]資料夾清單,相關內容說明可參考表 1


到目前為止我們已經可以很輕鬆的建立起一個新專案,而且完全不相依於任何IDE。假若Maven能順便協助開發人員將IDE開發環境設定好那可就更完美了!那是當然的,接著筆者將介紹Maven IDE Plug-in的使用。


1 範本清單

範本名稱

範本說明

default

簡易的應用程式專案。

ejb

簡易的EJB專案。

struts

Web應用程式專案並且以StrustMVC的架構。

struts-jstl

Web應用程式專案並且使用StrustJSTL架構。

struts-validation

Web應用程式專案並且使用StrustValidation架構。

tapestry

Web應用程式專案並且以TapestryMVC的架構。

web

簡易的Web應用程式專案。

web-jstl

簡易的Web應用程式專案並且使用JSTL

web-velocity

Web應用程式專案並且以VelocityMVC的架構。

complex

建立一個複雜的J2EE專案,產生multiproject架構。


資料結構 1 Maven建議資料夾結構

/

+- src/ --專案相關代碼路徑

| +- main/ --主要程式碼路徑

| | +- java/ --java原始碼路徑

| | | +- ...

| | +- resources/ --所需資源與設定路徑

| | +- ...

| +- test/ --測試程式碼路徑

| | +- java/ --java測試原始碼路徑

| | | +- ...

| | +- resources/ --測試用資源與設定路徑

| | +- ...

| +- site/ --建立專案站台設定路徑

| +- xdoc/

| +- ...

+- target/ --專案建置成品放置

| +- ... 與其他建置中暫存路徑

+- project.xml --POM設定檔

+- README.txt

+- LICENSE.txt


1 Maven Genapp

Maven Eclipse Plugin

透過圖 1的操作我們已經建立好套用web範本的MyWebApp專案,接著進入建立好的MyWebApp資料夾中並執行maven eclipse,這時Maven將協助開發人員建立Eclipse的開發環境設定。

當產生出環境設定之後,啟動Eclipse並於功能表中執行[File][Import…],進入匯入專案作業。在對話視窗中選擇[Existing Projects into Workspace]進行下一步,接著在對話框中[Select root directory:]選項執行[Browse],並指向產生專案的路徑[D:DevMyWebApp],最後按下[Finish]即可。


第一次在Eclipse中匯入Maven建立的專案時,Eclipse[Problems]標籤將會判斷出多項錯誤,分別是[The project cannot be built until build path errors are resolved]與多個[Unbound classpath variable: 'MAVEN_REPO/xxxx/jars/xxxx-xx.xx.jar' in project MyWebApp MyWebApp]。這些錯誤的原因在於Maven使用了MAVEN_REPO參數設定相關JAR檔的關聯,而Eclipse開發環境中尚未設定該參數所致。


解決方式有二種,其一執行[maven eclipse:add-maven-repo -Dmaven.eclipse.workspace=%WORKSPACE_PATH%]可透過Maven Eclipse Plugin進行MAVEN_REPO的參數設定至[%WORKSPACE_PATH%]指定的workspace路徑下。執行完成後,必須重新啟動Eclipse才會生效。


其二可參考圖 2直接在Eclipse功能表中點選[Window][Preferences],在對話視窗中選擇[Java][Build Path][Classpath Variables]進行Classpath參數的設定,新增MAVEN_REPO參數,並將路徑指向[${maven.home.local }/repository]下即可。Maven預設repository的路徑指向[C:Documents and Settings%登入帳號%.mavenrepository]


當完成設定後Eclipse將依目前設定重新建置專案,結果如圖 3所示,這時之前的錯誤訊息將不會再出現。因此日後在專案開發的過程中當我們修改過project.xmlPOM設定或者新增、移除JAR的的相依關聯性時,只需再次執行maven eclipse就可依project.xml的設定重新產生相符的Eclipse開發環境配置。如此的Plugin不管在那個專案中都非常方便。


2 設定Eclipse MAVEN_REPO參數


3 開啟專案的Eclipse IDE

Maven JBuilder Plugin

目前業界進行J2EE專案開發最常用的IDE,除了Eclipse之外我想另一個廣受歡迎的就是JBuilder吧。在此也不避諱的為各位介紹一下如何使用Maven JBuilder Plugin協助我們建立環境設定。


在此我們直接執行maven jbuilder,若無意外的話將會看到BUILD SUCCESSFUL的訊息並且產生本範例中的[D:DevMyWebAppMyWebApp.jpx]的環境設定檔,但若發生BUILD FAILED的狀況的話,筆者大概可以猜測出讀者應該使用的是20052006JBuilder版本。


其原因在於截至目前為止,Maven JBuilder Plugin的版本為1.5,在目前的版本中預設並未支援JBuiler2005之後的版本設定。但若是因為如此而造成JBuilder的愛用者對Maven興趣缺缺的話,那可就是筆者的罪過了。


雖然預設的Plugin尚未支援新版的JBuilder,但只需進行小部分修正即可排除這個問題。首先至[${maven.home.local }/cache/maven-jbuilder-plugin-1.5]路徑下開啟plugin.jelly檔案,在檔案開頭附近很容易可以找到有一行的設定如[value=".jbuilderX,.jbuilder9,.jbuilder8,...]將其修改為[value=".jbuilder2005,.jbuilderX,.jbuilder9,.jbuilder8,...]參考設定 1,存檔後再次執行maven jbuilder即可。


這時我們將會發現Maven JBuilder Plugin正確無誤執行完成,也就是說事實上JBuilder每一個不同版本在安裝時會將相關設定檔存放至UserHome下,例如JBuilder2005存放路徑為[C:Documents and Settings%登入帳號%.jbuilder2005],因此我們只需將設定的版本名稱加入plugin.jelly中就可使Maven JBuilder Plugin支援該版本。


接著只要在JBuilder中執行[Open Project…]開啟由Maven產生的MyWebApp.jpx,無需調整任何設定即可進行專案開發,參考圖 4


設定 1 maven-jbuilder-plugin-1.5/plugin.jelly

<goal name="jbuilder"

description="Generate JBuilder project files"

prereqs="jbuilder:generate-library, jbuilder:generate-project"/>

<def:taglib uri="jbuilder">

中間省略…

<def:tag name="getDefaultProject">

<j:set var="jbuilderDirs" value=".jbuilder2005,.jbuilderX,.jbuilder9,.jbuilder8,.jbuilder7,.jbuilder6,.jbuilder5,.jbuilder4,.jbuilder" />

<j:set var="${userHome}" value="null" scope="parent"/>

以下省略…


4 開啟專案的JBuilder IDE

Maven IDEA Plugin

介紹完二個主流IDE的設定之後,我們來看一下一個鮮為人知,但功能卻不俗的IDE開發工具IntelliJ IDEAIDEA無需像Eclipse必須自行加上一堆Plugin之後才能達到較完善的開發環境要求,預設的IDEA環境非常的友善,上手非常容易,並且相似於Eclipse,網路上有眾多的Plugin支援IDEA。另外在所有的IDE開發工具中IDEA擁有最強的Refactor功能,方便開發人員進行重構。


Maven IDEA Plugin可以協助建立IDEA開發環境,但必須注意到目前IDEA Plugin版本為1.6,若讀者系統中的版本較舊,可透過執行[maven plugin:download -DgroupId=maven -DartifactId=maven-idea-plugin -Dversion=1.6]進行下載。


執行maven idea後,啟動IDEA進行[Open Project…]開啟由Maven產生的MyWebApp.ipr無需調整任何設定即可進行專案開發,參考圖 5


5 開啟專案的IntelliJ IDEA IDE

結語

在本期中介紹了如何使用Maven起始一個專案的建置,也了解了如何透過IDE PluginMaven的專案導到各個主流的IDE開發環境中進行協同開發,從這些實作中我們了解到,Maven並不會在開發中完全取代IDE或者限制使用特定IDE,而是以一種通用的專案建置方式協助每一個專案的進行。開發人員可以使用任何方便的IDE工具進行開發,而專案的建置、管理、測試、佈署等,一切的一切交給Maven就搞定了。

5 則留言:

匿名 提到...

Your style is really unique compared to other folks I have read stuff from.
I appreciate you for posting when you have the opportunity, Guess
I will just bookmark this page.

Also visit my web site: raspberry ketone diet

匿名 提到...

I could not resist commenting. Well written!


my blog; unlock her legs review here

匿名 提到...

Thanks for the marvelous posting! I genuinely enjoyed reading it,
you could be a great author.I will be sure to bookmark your blog and definitely will
come back sometime soon. I want to encourage you to ultimately continue your great posts, have a nice morning!


Here is my web site homepage ()

匿名 提到...

That is a good tip especially to those fresh to the blogosphere.

Simple but very precise information… Appreciate your
sharing this one. A must read article!

Also visit my web page :: Simpsons tapped out astuce (www.wat.tv)

陳雅文 提到...




寂寞同城交友聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
後宮視訊
後宮視訊
後宮視訊
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
金瓶梅視訊聊天室
視訊美女聊天交友
蘋果視頻社區聊天室
同城—夜情交友qq群
夜色視頻多人聊天室
男人女人做愛視頻
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
真愛旅舍視頻聊天室
視訊聊天交友
視訊聊天交友
視訊美女
視訊美女
視訊美女
真愛旅舍視頻聊天室