環境: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目錄,不然會報錯。