2011-05-06 79 views
1

我即將在這個可怕的舊Java Web應用程序上做一些工作,這是我前一陣子繼承的一個朋友。達到了65536字節的限制

當我設置tomcat,導入的項目和所有到我的eclipse工作區後,我得到這個錯誤,在servlet中的方法超過了65536字節的限制。

該方法可能會超過這個限制,它有幾千個loc。但事情是,我以前在這個應用程序上工作過,沒有得到這個錯誤,並且根據提交日誌,因爲沒有代碼被添加到servlet。

難道是因爲這次我正在使用macbook嗎?上次我在應用程序上工作時,我在Ubuntu上使用了HP桌面。不同的Java版本,CPU架構?這甚至有可能嗎?

除了重構代碼,有什麼我可以做的嗎?

+0

可能的重複:http://stackoverflow.com/questions/5689798/why-does-java-limit-the-size-of-a-method-to-65535-byte – smas 2011-05-06 08:02:13

+0

也非常相似,可能是相同的問題:http://stackoverflow.com/questions/5484253/jspservice-is-exceeding-the-65535-bytes-limit – WhiteFang34 2011-05-06 08:12:40

回答

6

有什麼我可以做的,除了 重構代碼?

否重構代碼。沒有辦法應該那麼久。永遠。 Write small methods!

說真的:任何IDE都會引導您完成重構,但它需要完成。您也可以閱讀Refactoring: Improving the Design of Existing Code獲取指導。

+2

「永遠」應該全部用大寫字母。 – izb 2011-05-06 08:03:42

+0

我只僱用對應用程序的完全不相關的部分進行一些小的更改。我對這個怪異的servlet不負責任。 我很想重構代碼,但因爲我在時鐘上,我會嘗試使用另一個編譯器。 – jim 2011-05-06 08:13:49

+0

重構該方法有什麼困難?只要將'上帝方法'的大塊或重複塊分割成另一種方法,然後從上帝方法中調用此方法即可。就這樣。一旦您選擇了一段代碼,一些IDE就會爲此提供快捷方式/上下文選擇。 – BalusC 2011-05-06 12:09:36

1

你使用的是什麼cpu應該沒關係。你現在正在使用的編譯器最有可能產生另一個輸出(超出限制)。

我肯定會重構,但您可以嘗試切換到上次編譯代碼時使用的編譯器。

+0

謝謝。我會嘗試安裝一個老版本的eclipse。 這次我使用的是Helios,上次我使用Ganymede或其他東西。 – jim 2011-05-06 08:11:23

1

如果代碼是由JSP頁面生成的,則可能會超過64k method limit。像Weblogic這樣的Web容器實際上會爲你解決這個問題。 Tomcat不會,也許你之前使用的是不同的Web容器?要解決這個問題this page建議改變你的靜態包含這樣的:

<%@ include file="test.jsp" %> 

動態包括這樣的:

<jsp:include page="test.jsp" /> 

更新:因爲你正在處理一個servlet,你很可能出的運氣。這是JVM規範的限制,請參閱Why does Java limit the size of a method to 65535 byte?我不相信您會找到一個可以解決此問題的編譯器。您可能ProGuard有一些運氣,以最大限度地減少編譯的大小。

+0

沒有。問題在於servlet。儘管如此,所有這些代碼應該已經被放在單獨的方法中。 – jim 2011-05-06 08:16:27

+0

哦,哇!肖恩現在有正確的答案。我不確定你是否會找到一個解決這個問題的編譯器。這些都是由於JVM規範的限制。 – WhiteFang34 2011-05-06 08:20:46

0

可以使方法更小的一件事是關閉調試。打開調試程序時,每行(帶有代碼)都有一個標記行的語句。

相關問題