2012-11-07 69 views
7

我們有一個應用程序,直到最近纔有一個Maven WAR項目。我們使用Tomcat Maven插件使用運行在本地開發人員工作站應用程序:Tomcat Maven插件和多模塊Maven項目

mvn tomcat:run 

我們能夠改變JSP文件,同時嵌入的Tomcat實例正在運行和變化將出現在Web瀏覽器就好了。我從插件文檔中瞭解到,在使用tomcat:run目標時,WAR會作爲動態Web應用程序加載,因此,在運行時由Tomcat選擇在源文件中對JSP文件所做的更改而無需重新啓動。

應用程序已經達到相當大的規模,我們需要在Web項目之外的幾個不同的地方重用大量的類,所以我們將代碼重構爲多模塊Maven項目。結構現在是:

parent Maven POM 
    | 
    ---- artifact1.jar 
    | 
    ---- artifact2.jar -> depends on artifact1.jar 
    | 
    ---- artifact3.jar -> depends on artifact1.jar 
    | 
    ---- artifact4.jar -> depends on artifact2.jar and artifact3.jar 
    | 
    ---- artifact5.war -> depends on artifact1.jar, artifact2.jar, artifact3.jar and artifact4.jar 

後,我們無法使用Tomcat的重構:從項目的根目錄下運行WAR項目作爲插件運行是無法檢測到JAR文物。所以,我們切換到使用tomcat:run-war-only插件。 WAR模塊現在可以正常運行。

然而,從文檔,似乎運行戰爭唯一的目標對待WAR文件作爲打包的Web應用程序。因此,我們現在對JSP文件所做的任何更改都不會在運行時由嵌入式Tomcat服務器執行。對於每個JSP文件的更改,我們都必須重新啓動服務器。

是給我們在這個多模塊Maven建立一種方式來運行WAR項目,動態Web應用程序,以便至少改變JSP文件是由Tomcat的回升,無需重新啓動?

+0

與Maven 3.x和Tomcat7 Maven插件,命令'MVN -am -pl artifact5 tomcat7:run'工作得很好。 – manish

回答

3

只是做一個MVN安裝第一和Tomcat插件現在位於阿帕奇然後

mvn -pl artifact5 tomcat:run 
+0

我知道這是一個解決方案,只需要兩個步驟而不是一個。不過,這是一個有效的解決方案,我很樂意接受它作爲答案。我必須運行構建爲mvn -pl artifact5 -am tomcat:運行時減少實例的數量,即使這不起作用。 :) – manish

3

第一次使用新版本中看到http://tomcat.apache.org/maven-plugin-2.0/

這時如果使用maven3,您只需使用的tomcat6/tomcat7:從頂部運行。模塊中的所有類都將添加到您的webapp類加載器中(將節省一些ios,因爲您不需要首先安裝所有jar)!請參閱http://tomcat.apache.org/maven-plugin-2.0/run-mojo-features.html

HTH!

+0

我曾嘗試過最新的插件,但這並沒有幫助。 :( – manish

+0

任何樣品重現你的問題的基本原型正常工作,這是一個類似用途的情況下 –

+0

我想與Maven 3,你仍然需要指導Maven來打包其他模塊我用'MVN -am包tomcat7:。運行-am'' -am package'用於明確地封裝所有的模塊,'tomcat:run-war'只適用於WAR,也可能同樣適用於'tomcat:run'。 –