Maven + Eclipse + Tomcat - 開啓項目調試之旅

本文的讀者需要擁有一些Maven基礎知識和實踐,如果沒有,請直接繞過或者先看一些關於Maven教程,比如Juven翻譯的《Maven權威指南》,google一下便知。

開門見山,首先拋出一個問題(如果你對我遇到的問題不敢興趣,請飄過,直接看分割線以下的文字):

我有一個團隊基礎框架項目,代號:framework,用maven構建,是個war類型的項目。團隊中其他的應用項目都會用到它,包括Java程序和Web相關的一些文件(js、css和html等公共組件)。所以我在package的時候產出了多個構建,包括:包含Java程序的jar文件(classifier爲bin)和包含Web公共組件的zip文件(classifier爲webcontent)等,併發布到了svn上。因爲衆多項目中用純Eclipse和Eclipse+Maven構建的都不在少數,所以我認爲這樣將將框架打包發佈是最平衡的一種方式。

在我負責的一個應用項目中(這個項目是用Eclipse+Maven構建的,暫且叫他應用項目A)的pom的依賴中包含了這個framework項目,且classifier設置爲bin。用maven-tomcat-plugin的方式部署運行是沒問題的,應用項目A的WEB-INF/lib目錄中會被自動添加framework-bin-<版本號>.jar文件,但是在這種用命令行啓動maven-tomcat-plugin運行項目的情況下是無法停在斷點並進行調試的。而後,我只能試圖用eclipse環境下設置的Tomcat啓動應用項目A,但是這時會報出找不到framework中的一些類定義的錯誤。其實,如果framework項目是個jar類型的Maven項目的話這種錯誤是不會出現的,因爲m2eclipse會在發佈的時候自動將framework打成jar包並放入應用項目A的WEB-INF/lib目錄中去。這一點m2eclipse做的非常好,毫無疑問。但是問題是,framework是以Web項目形式存在的,即:類型是war。在這種情況下,m2eclipse打的framework項目的jar包的內部實際上是war包的結構。也就是說,其中的結構完全是Web項目的,包含了WEB-INF等文件夾,真正需要用到的Java程序也被放入了WEB-INF/classes目錄中。前面我們說將應用項目A的framework項目依賴的classifier設置爲了bin,在framework項目中也加入了classifier爲bin的打包配置,並部署到了Maven私庫中。但是m2eclipse在配合應用項目A在eclipse環境下的Tomcat部署時並沒有關注到classifier。我懷疑是m2eclipse不妥的一個地方,而不是我的配置問題。

-----------這裏是分割線-----------

以上是我遇到的問題,在用N種方法無效的情況下,我想到了直接用maven-tomcat-plugin來部署、運行和調試應用項目A。Juven的《Maven實戰》中可能會有介紹,但是書沒在辦公室,也不便查看:)。網上找到了一些資料,都很繁瑣。最後看到了一篇國外的文章:http://docs.codehaus.org/display/MAVENUSER/Dealing+with+Eclipse-based+IDE。從中獲知在Maven的2.0.8版本之前,在Eclipse+Tomcat的環境下調試Maven項目確實需要做很多配置,但是在2.0.8版本之後就方便多了。具體方式如下:

1、在安裝了m2eclipse插件並配置好maven-tomcat-plugin後,單擊Eclipse菜單“Run”中的“Run Configurations”。

2、在彈出的對話框中的左側樹中找“到Maven Build”,在其上點擊右鍵並單擊“New”。

3、在右側的“Name”一欄填入自定義的名稱。單擊在“Main”選項卡的“Browse Workspace”按鈕,選擇目標項目,選擇後在“Base directory”一欄中會出現形如“${workspace_loc:/project_a}”的內容(project_a是前文所述應用項目A,它會根據你所選的目標項目而改變)。

4、在“Goals”一欄中填入“tomcat:run”。

5、在“Maven Runtime”選擇你需要的Maven環境(注意:必須是2.0.8以上的版本)。

6、單擊“Apply”,配置完成。

經過測試,通過以上配置,在eclipse自身的Run(“右箭頭”)和Debug(“小蟲子”)按鈕下都會找到以你先前配置中“Name”值爲名的條目(條目最前端也會有“m2”標識),單擊之後即可啓動基於Tomcat之上的相應項目的運行操作或調試操作。至於是運行項目還是調試項目,只取決於你單擊的條目是在“右箭頭”按鈕下還是在“小蟲子”按鈕下。從這方面來看,他們還是很智能化的。

其實上述配置並不複雜,我相信讀者按照以上步驟去做是完全可以搞定的。分割線之前的問題是想引發大家關於軟件易用性、兼容性方面的的一些思考。希望對這兩點有興趣的朋友回帖探討。

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