maven + eclipse + tomcat熱部署

環境:eclipse  + tomcat  + maven + m2eclipsehtml

解決這種問題有兩種方案(方案二更好用,不想看方案一的人能夠直接繞過)。java

方案一:web

  第一種方案摘自http://blog.csdn.net/fengyun111999/article/details/5693584,大體過程以下:apache

1.api

  到${tomcat_home}/conf/tomcat-users.xml文件中新定義一個tomcat用戶(maven將使用這個用戶往tomcat上發佈maven web項目)。tomcat

< tomcat-users >  
    < user username = "admin" password = "password" roles = "manager" />  
</ tomcat-users> 

 2.服務器

  啓動tomcat,而後訪問 http://localhost:8080/manager/html ,輸入admin/password, 若是出現如下界面,表示tomcat一切OK:app

3.eclipse

在maven的settings.xml的servers結點下添加以下代碼:(讓maven在發佈項目時用這個admin/password這個帳號訪問tomcat)webapp

<server>  
        <id>tomcat</id>  
        <username>admin</username>  
        <password>password</password>  
</server> 

4.

  在eclipse中新建一個打包類型爲war的maven項目,在這裏我將項目名稱命名爲demo。

5.修改pom.xml文件,格式以下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
    <modelVersion>4.0.0</modelVersion>  
    <groupId>com.demo</groupId>  
    <artifactId>demo</artifactId>  
    <version>0.0.1-SNAPSHOT</version>  
    <packaging>war</packaging>  
    <dependencies>  
        <dependency>  
            <groupId>javax.servlet</groupId>  
            <artifactId>servlet-api</artifactId>  
            <version>2.5</version>  
        </dependency>  
    </dependencies>  
    <build>  
        <plugins>  
            <plugin>  
                <groupId>org.codehaus.mojo</groupId>  
                <artifactId>tomcat-maven-plugin</artifactId>  
                <version>1.0-beta-1</version>  
  
    <!-- 告訴maven用admin/password帳號訪問setting.xml中id爲tomcat的服務器,去http://localhost:8080/manager/html這個地址發佈個人項目-->  
                <configuration>  
                    <url>http://localhost:8080/manager/html</url>  
                    <server>tomcat</server>  
                    <username>admin</username>  
                    <password>password</password>  
                </configuration>  
            </plugin>  
        </plugins>  
    </build>  
</project>  

6.

    在src/main/webapp下建立WEB-INF目錄,在其它建立web.xml文件,以下:<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
</web-app> 

再在src/main/webapp下建立一個測試用的jsp文件HotDeplyTest.jsp,隨便寫什麼內容,符合jsp標準便可。

 

 7.Demo項目,鼠標右鍵,Run As 選擇 Maven build,出現以下界面:

 

在Goals中添加點東西:package tomcat:redeploy

這句話是什麼意思呢?運行build的目的就是打包,同時部署到tomcat上。

 8.

點擊Run按鈕,注意看Console,看看有沒有錯誤,沒有錯誤的話,訪問:http://localhost:8080/demo/HotDeployTest.jsp 。若是出現了你寫的內容,則萬事大吉。

這時候,咱們修改

HotDeployTest.jsp的內容,再刷新頁面。會發現頁面顯示的仍是修改前的內容。這是由於咱們並無修改發佈到tomcat 服務器上的那個war包中的HotDeployTest.jsp。所以,須要從新打包。再次鼠標右鍵,Run As 選擇 Maven build(此次選不帶點號的那個),maven開始從新打包。打包後再刷新頁面,發現頁面內容已經爲修改後的。

 

  咱們想一想,每作一次修改,想立刻看到效果,卻都要從新打包一次,這在大規模開發中太影響效率了。有沒有什麼辦法能夠不用打包而讓tomcat感知到代碼的更新呢?咱們之前開發普通web 項目(非maven項目)時用的辦法能夠用到這裏來,可是須要額外的步驟,這個過程即是我要說的方案2。

 

方案二:

  1.修改tomcat的server.xml配置文件,在host結點下添加以下代碼

<Context docBase="F:\eclipse_workspace\demo\src\main\webapp" path="/demo" reloadable="true"></Context>  

這樣tomcat即可以即時感知到F:\J2EE\eclipse_workspace\demo\src\main\webapp目錄下文件的變化並自動從新部署了。

  可是,咱們的class文件和配置文件是編譯在target/classes下呀。別急,繼續。

  2.

   回到eclipse中,右擊demo項目,選java build path ,點擊source選項卡,修改最下面的Default output folder爲demo/src/main/webapp/WEB-INF/classes。再選擇上面的demo/src/main/java及demo/src/main/resources下的Output folder選項,點擊edit按鈕,選擇第一項Project's default output folder,點擊OK。

  這樣java會被編譯到WEB-INF下的classes目錄,爲tomcat所感知了。但是,還有項目的maven依賴包呢。

  3.通常狀況下,一個項目的依賴包一旦穩定下來,不會有太多的變更。所以,直接把maven依賴包拷到WEB-INF/lib下便可。

具體作法以下:

進入命令行,切換當前目錄到項目根目錄下。運行命令

mvn  dependency:copy-dependencies

這時候demo項目的依賴包會被導到target/dependency下,將它們拷到WEB-INF/lib下便可。若是依賴包有變更,再導一次就行了。

  

myeclipse部署maven時,src/main/resources裏面配置文件加載不到webapp下classes路徑下的問題

解決myeclipse部署maven時,src/main/resources裏面配置文件加載不到webapp下classes路徑下的問題。

有時候是src/main/resources下面的,有時候是src/main/Java下面的。

把沒有編譯的文件,先點擊:Excluded,而後再點擊:Remove,便可。

 

總結:

  方案一和方案二都支持斷點調試。但方案一每次修改文件都要從新maven build,方案二則不用。可是若是用方案二而且最後要用maven將項目打包成war,還須要將java類的編譯路徑改回來,而且刪除掉WEB-INF下的classes目錄和lib目錄,不然會報錯。

相關文章
相關標籤/搜索