2013-10-08 69 views
0

我們正在考慮從Eclipse切換到IntelliJ IDEA。我們必須使用JRebel,所以我們不必每次更改一行代碼就重新啓動應用程序。JRebel不斷用GWT重新加載每個客戶端類文件

每當我在一個.java文件中更改一行代碼,並且在該特定文件上調用IntelliJ make過程之後,JRebel似乎重新加載了一大堆客戶端類。使用Eclipse,有時會發生這種殘酷的重新加載行爲,但在大多數情況下,類重新加載過程要快得多!

我認爲我錯過了一些東西。 有沒有人使用IntelliJ和JRebel的經驗知道如何讓JRebel插件重新加載一個類,當沒有更多的需要?

任何幫助將不勝感激!

  • 注意1:我知道超級開發模式可以幫助,但我想有 JRebel插件首先工作。
  • 注2:虛擬機arg -Drebel.check_class_hash=true也有幫助,但我不認爲插件是爲了這樣工作的。
+0

只是奇怪,JRebel優於超級開發模式的優勢是什麼? JRebel做超級開發模式無法做到的事情嗎? –

+0

嗨,JRebel的傢伙。我想你想讓我說爲什麼我愛JRebel是不是:)?我們正在編寫一個複雜的工作流程的大企業應用程序。 JRebel允許我們重新加載部分工作流程,甚至是我所在的部分,而無需重新加載應用程序。否則這會迫使開發人員重新啓動複雜的嚮導,即使在Selenium的幫助下也是一種痛苦。從用戶角度來看,JRebel以相同的方式處理客戶端和服務器端代碼。超級開發模式重新編譯整個應用程序和JRebel更快,因爲它只重新編譯幾個文件(至少在Eclipse中)。 – otonglet

+0

那麼,我的目標其實是確定我們是否想花時間爲GWT添加特殊支持,儘管有超級開發模式。如果超級開發模式適用於人們,我們不會花時間在GWT集成 - 簡單。順便說一句,JRebel會重新編譯任何東西,它只使用編譯器(javac,ejc)的結果並更新正在運行的應用程序中的類和資源。 –

回答

0

-Drebel.check_class_hash = true是爲這種情況引入的。但是你應該實際檢查的是爲什麼你的客戶端類被重新加載。 JRebel會在類文件的時間戳發生更改時重新加載類,或者,如果設置了-Drebel.check_class_hash = true,它將除時間戳以外檢查散列。

因此,首先需要注意的是,當您創建單個類,創建其他類的時間戳,JRebel是否重新加載,更改?也許IntelliJ的GWT構建只是在編譯時觸及太多文件?或者,也許你可以編譯單一的課程,這是你實際改變的課程。

我的一個假設是,如果上述不是真的,那麼GWT.create代碼中的某處會改變,並且必須在make期間重新運行,否則您所做的更改不會被傳播。這隻會被make過程觸發,並且JRebel不會自行觸發重新運行GWT.create。這只是一個假設,所以請不要認真對待它。

您可以嘗試聯繫JRebel支持。

+0

感謝您的回答。我不知道爲什麼這些類會重新加載。我剛接觸IDEA製作流程。但我知道這是這個問題的核心。沒有GWT.create調用。然而有些資源是使用GIN注入的。當你說GWT.create必須重新運行時,你的意思是說,如果我的代碼中有一個GWT.create調用,那麼所有以這種方式創建的類將不得不重新加載? GIN注射會導致相同的行爲嗎?無論如何感謝您的建議。如果您願意在另一個論壇上回答,我會盡力聯繫JRebel支持。 – otonglet

+0

所以我去了JRebel的支持。根據他們使用-Drebel.check_class_hash = true與IntelliJ是正確的行爲。 http://zeroturnaround.com/forums/topic/jrebel-constantly-reloading-every-client-side-class-file-with-gwtintellij/#post-37265 @Anton感謝您的反饋。 – otonglet