2011-01-14 75 views
5

我的應用程序在Eclipse IDE和Tomcat中使用Struts2 MVC,Spring JDBC模板。每當我更改類代碼時,我都必須重新啓動Tomcat,每次浪費大約15-20秒。如何使Tomcat快速加載更改以快速進行Java Web開發

我配置了熱部署,即on-java-class-change,context自動重新加載,但它經常失敗,我必須重新啓動Tomcat。

我希望是:

  1. 當我做出改變,以JSP,應自動加載,而不是在-1請求。

  2. 當一個java類被改變和構建時,只有那個類應該被加載,而不重新啓動Tomcat,即使整個上下文不應該重新啓動或重新加載。

如果有人使用過Jetty,請分享 - Jetty是否爲這些問題提供了更好的解決方案。

在PHP中,您對腳本進行了更改,然後訪問該頁面,準備就緒。我只是希望它在Java中。

+1

你有沒有考慮過使用Play框架?http://www.playframework.org/ – zengr 2011-01-14 08:21:31

回答

1

我們在工作中使用嵌入式Jetty,這是一個爆炸。有關嵌入碼頭的指南,請參閱http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty

Jetty端的啓動時間非常快(1-2秒)。在我們的例子中,雖然春天需要很多時間來初始化。

這是很容易配置碼頭到自動重新加載JSP頁面只需將它指向一個目錄,而不是戰爭的文件和JSP會自動重新加載,這樣的事情:

public class OneWebAppUnassembled 
{ 
    public static void main(String[] args) throws Exception 
    { 
     Server server = new Server(8080); 

     WebAppContext context = new WebAppContext(); 
     context.setDescriptor(webapp+"/WEB-INF/web.xml"); 
     context.setResourceBase("../test-jetty-webapp/src/main/webapp"); 
     context.setContextPath("/"); 
     context.setParentLoaderPriority(true); 

     server.setHandler(context); 

     server.start(); 
     server.join(); 
    } 
} 

類重載可能使用熱插拔,我不知道是否有現成的解決方案,當熱插拔不工作。

2

看一看JRebel。您必須爲此付費,但從長遠來看,節省的時間可能是值得的! :)

+0

是的,我讀過它。我正在尋找其他的替代品或配置技巧等。你用過JRebel,你有什麼經驗嗎? – 2011-01-14 03:36:58

+0

不幸的是,我沒有使用JRebel,但它看起來像是最好的解決方案。另一個是在Netbeans內工作的Javeleon(http://javeleon.org/)。 – 2011-01-14 17:20:48

1

查看SpringSource工具套件。幾個月前我開始使用它。

它帶有一個預先配置好的SpringSource tc服務器(開發版)。基本上,當我在Web應用程序上工作時,只需將其從Project Explorer拖到SpringSource tc服務器上並繼續開發。包含Java類更改和JSP更改的代碼即時重新加載。所以您所做的任何更改都可以立即查看。

我做的另一件事是碼頭,類似於但是什麼尤瓦提到我的配置是在Maven的2的pom.xml和看起來像

<plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 
    <configuration> 
     <contextPath>/tas</contextPath> 
     <tmpDir>/tmp</tmpDir> 
     <jettyEnvXml>${basedir}/jetty-env.xml</jettyEnvXml> 
     <systemProperties> 
      <systemProperty> 
       <key> org.mortbay.jetty.webapp.parentLoaderPriority </key> 
       <value>true</value> 
      </systemProperty> 
     </systemProperties> 
    </configuration> 
</plugin> 

然而,我更喜歡做手工重裝與碼頭等等我通常將

<reload>manual</reload> 

代入<configuration>元素。手動重新加載僅適用於我在Java文件中所做的更改。所以在測試用例發生了很多實質性的變化和成功的通過之後,我在Jetty控制檯中輸入了命令並重新加載了整個事件。 (我非常喜歡Ctrl-S的快捷方式,因此每隔兩行之後都會打到它,但是我不想在每寫完第二行代碼之後重新加載Jetty)。

另請注意,手動重新加載僅適用於Java類更改,並且只有在更改Java類或可能是XML配置時才需要。如果你所做的全部改變是JSP,那麼你不需要重新加載自動獲取的更改,你可以在瀏覽器中點擊刷新來查看JSP更改,而無需手動重新加載。

希望這會有所幫助!

2

掛毯5有live class and template reloading,在Tomcat和碼頭工作。這使得開發速度更快。

至於Jetty over Tomcat,我通常使用Jetty開發這些天。它啓動速度非常快,而且非常可配置。您可以編寫自己的簡單的服務器,並在Eclipse中運行它,就像這樣:

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.webapp.WebAppContext; 

public class JettyServer { 
    public static void main(String[] args) throws Exception { 
     run(8080, "/path/to/eclipse/project/WebContent", "/WEB-INF/web.xml"); 
    } 
    private static void run(int port, String resourceBase, String descriptor) throws Exception { 
     Server server = new Server(port); 

     WebAppContext context = new WebAppContext(); 
     context.setResourceBase(resourceBase); 
     context.setDescriptor(resourceBase+descriptor); 
     context.setContextPath("/"); 
     context.setParentLoaderPriority(true); 
     server.setHandler(context); 
     server.start(); 
     server.join(); 
    } 
} 
1

我使用的Eclipse的Tomcat Sysdeo的插件Laucher取得了巨大成功http://www.eclipsetotale.com/tomcatPlugin.html。 DevLoader的東西真是太棒了。我遇到的唯一問題是無法重新加載引入新屬性或方法的類。 該插件的作者也非常敏感。