Myeclipse與tomcatplugin實現應用佈署

原文地址:http://truemylife.iteye.com/blog/1669031

背景:之前我們在項目裏maven的使用還是比較弱,主要就兩點應用 

   ①編譯依賴,擴展nexus私服庫,對使用的依賴jar包進行版本統一管理。

   ②擴展continumm,進行自動發佈和自動集成單元測試。

問題:沒有使用m2eclipse與tomcatplugin完成熱佈署之前,爲了能直接啓動tomcat,把web應用的輸出目錄直接放在工程下的src/main/webapp,編譯輸出也直接放在src/main/webapp/WEB-INF/classes,單元測試輸出放在src/main/webapp/WEB-INF/test-classes,還要拷貝maven依賴下的jar包到WEB-INF/lib目錄。這樣做雖然能啓動tomcat,但是帶來其他一些不便和管理上的不規範

①首先拷貝jar包到lib,即增加了管理的時間,又可能導致編譯依賴版本與lib下的運行版本不一致問題。

②maven規範輸出路徑是target,因此每次對Maven->Update Project Configurations,會發現Java Build Path->source下的Output又統統變回到target下的目錄。然後只能又手動改回去..

③Junit做單元自測時,也是隻認target目錄,沒辦法,每次做自測之前,必須Run  Configurations->Classpath- >Advanced...,把當前src/main/webapp/WEB-INF/classes及src/main/webapp/WEB-INF/test-classes加進來,這樣纔不會報ClassNotFoundException錯誤。效率很低。

目標:對應以上問題,通過M2eclipse與tomcatplugin熱佈署後,解決三個問題

①工程裏去掉lib目錄,發佈時自動根據pom.xml裏描述加載需要的包。

②把編譯輸出路徑改成與maven規範一致的target路徑,這樣preferences->Maven->User  Settings進行Update Settings操作後還是原來的路徑。

③Junit單元測試時,不用每次都Run Configurations。

M2eclipse與tomcatplugin實現佈署

一、下載tomcatplugin3.3,可以上官網下載,本站提供下載:http://resource.caidao8.com/technique/tomcatPluginV33.zip

    同時必須下載經網友修改的tomcat.jar。本站提供下載:http://resource.caidao8.com/technique/tomcat.jar

    如果你有興趣可以下載源碼:http://resource.caidao8.com/technique/tomcatsrc.rar。

  下載完後,把com.sysdeo.eclipse.tomcat_3.3.0拷貝到你的eclipse(我這裏的eclipse是3.5,同時也試過3.6) plugin目錄,如果你已經有低版本的tomcatplugin,最好刪除掉再拷貝。這樣你的tomcatplugin插件就搞定了。

二、下載tomcat6或tomcat7後,設置Prefefrences->tomcat,如果你的eclipse版本在3.5之前,eclipse的Prefefrences->tomcat選項裏還沒有version tomcat7.x。不過還是可以通過選tomcat6.x,實際上加載的tomcat7。如下圖配置

在要


 

要注意,如果加載tomcat7要在JVM-Settings加入tomcat-juli.jar,這是tomcat6.x加載tomcat7時額外要做的( tomcat 6不需要做這一步),否則一點start就會報找不到相關類。加載tomcat-juli.jar如下圖:

 


三、接下來打開第一步com.sysdeo.eclipse.tomcat_3.3.0目錄,看到有個Devloader.zip,還有一個DevloaderTomcat7.jar,如果你是Tomcat7,把DevloaderTomcat7.jar拷貝到TOMCAT_HOME/lib/目錄下,如果是tomcat6,把Devloader.zip拷到TOMCAT_HOME/lib/目錄下並重命名成Devloader.jar。如果是其他更低版本,直接解壓Devloader.zip到TOMCAT_HOME/server/classes。tomcat6,7經測試都沒問題,更低版本未經測試。

四、把當前工程設置成tomcat project

右擊工程->properties->tomcat如下圖


Is a Tomcat Project打上勾

Context name爲空,

Subdirectory to set as web application root(optional)工程發佈的目錄 /src/main/webapp

接下來點擊Devloader Classpath,如下圖


從上圖可以看到有兩個選項

Use Maven與Activate DevLoader,而實際上使用標準的tomcatplugin插件,只有Activate  DevLoader一個選項,如果你只出來一個選項,那麼注意第一步下載了tomcat.jar,把它覆蓋到com.sysdeo.eclipse.tomcat_3.3.0目錄下的tomcat.jar,再重起eclipse,就發現有兩個選項了。Activate DevLoader選項是把全部的maven repository下的jar都列出來讓開發人員選,這樣比較麻煩,因爲repository裏可能有好幾個小版本,都給列出來後然後慢慢選,效率太差,而且還是沒跟pom.xml描述掛勾。Use Maven選項,根據pom.xml描述自動加載,這樣只要關心pom.xml的描述,只要確保pom.xml描述的統一與正確,各開發人員發佈的版本就是一致的。設置完成後 點一下Apply,然後點eclipse上面的tomcat start,一切順利運行,就算搞定了。這裏說一下這裏的Apply,根據剛纔第二步tomcat的設置,我們用編輯器打開TOMCAT_HOME/conf/server.xml,先觀察下它的初始配置,當你點擊一下Apply後,會發現server.xml被修改了。根據當前步對tomcat project的配置,發現server.xml多出代碼片段

<Context path="" reloadable="true" docBase="E:\projects\cmac\src\main\webapp"  workDir="E:\projects\cmac\work" >

   <Loader className="org.apache.catalina.loader.DevLoader" reloadable="true" debug="1"  useSystemClassLoaderAsParent="false" />

</Context>

如果再次點擊Apply,會再多出一段這樣的代碼,因此配置好後,不要重複點擊,否則就會重複佈署多個應用了。如果重複點了,只好手動去編輯server.xml,並刪除多餘的配置。

同時細心觀察的話,可以看到在工程下還生成了.#webclasspath文件,裏面就是描述了輸出的類及需要的依賴jar包列表,如果你想查看加載包是否正確,可以直接打個這個文件查看。

實施過程中需要重點了解的概念

1、重點要了解pom依賴描述的scope,classifier兩個屬性

scope與maven的生命週期有關係,主要有五種狀態:

①默認是compile,傳遞整個生命週期並最終輸出。

②provided,最終不輸出,比如servlet-api.jar,在編譯的時候是需要的,但是發佈的時候就不能輸出,因爲tomcat自帶了servlet-api.jar,如果輸出的話,會引起衝突,當然也可以使用system方式,在依賴描述的時候就使用tomcat下的servlet- api.jar。

③test,比如spring-test,這種只在測試階段使用。

④runtime,編譯時沒用,只在測試及運行時用。

⑤system,與provided類似,如第二點所講,直接引用外部jar包,而不去maven  repository下找相關jar了。

2、classifier一般是指當前的包有的限制性,比如只適用於jdk1.4或其他的一些限制,如果包有這種屬性,將不能被髮布,這時我們修改名字,再傳到nexus私服,去掉classifier屬性就可以了。

路徑問題的解決

工程採用了M2eclipse與tomcatplugin佈署後的第一天一切順利,但次日一早過來把WEB-INF下的classes目錄徹底刪除後,出現了新問題,起動Tomcat會報找不到/WEB-INF/classes/log4j.properties,也找不到/WEB- INF/classes/ApplicationContext*.xml,

       需要修改這裏的配置方式改成如下配置

<context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath:applicationContext*.xml</param-value>

    </context-param>

<context-param>

              <param-name>log4jConfigLocation</param-name>

              <param-value>classpath:log4j.properties</param-value>

</context-param>


如果上述文件無法下載,可移步下載已經打包好的資源文件:http://download.csdn.net/detail/zhaoguoshuai91/9295269


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