本文的讀者須要擁有一些Maven基礎知識和實踐,若是沒有,請直接繞過或者先看一些關於Maven教程,好比Juven翻譯的《Maven權威指南》,google一下便知。css
開門見山,首先拋出一個問題(若是你對我遇到的問題不敢興趣,請飄過,直接看分割線如下的文字):html
我有一個團隊基礎框架項目,代號: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不妥的一個地方,而不是個人配置問題。web
-----------這裏是分割線-----------tomcat
以上是我遇到的問題,在用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版本以後就方便多了。具體方式以下:併發
一、在安裝了m2eclipse插件並配置好maven-tomcat-plugin後,單擊Eclipse菜單「Run」中的「Run Configurations」。框架
二、在彈出的對話框中的左側樹中找「到Maven Build」,在其上點擊右鍵並單擊「New」。eclipse
三、在右側的「Name」一欄填入自定義的名稱。單擊在「Main」選項卡的「Browse Workspace」按鈕,選擇目標項目,選擇後在「Base directory」一欄中會出現形如「${workspace_loc:/project_a}」的內容(project_a是前文所述應用項目A,它會根據你所選的目標項目而改變)。maven
四、在「Goals」一欄中填入「tomcat:run」。svn
五、在「Maven Runtime」選擇你須要的Maven環境(注意:必須是2.0.8以上的版本)。
六、單擊「Apply」,配置完成。
通過測試,經過以上配置,在eclipse自身的Run(「右箭頭」)和Debug(「小蟲子」)按鈕下都會找到以你先前配置中「Name」值爲名的條目(條目最前端也會有「m2」標識),單擊以後便可啓動基於Tomcat之上的相應項目的運行操做或調試操做。至因而運行項目仍是調試項目,只取決於你單擊的條目是在「右箭頭」按鈕下仍是在「小蟲子」按鈕下。從這方面來看,他們仍是很智能化的。
其實上述配置並不複雜,我相信讀者按照以上步驟去作是徹底能夠搞定的。分割線以前的問題是想引起你們關於軟件易用性、兼容性方面的的一些思考。但願對這兩點有興趣的朋友回帖探討。
本文出自 「Hyper Mind」 博客,請務必保留此出處http://freej.blog.51cto.com/235241/449339