2011-05-06 84 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

可以使方法更小的一件事是关闭调试。打开调试程序时,每行(带有代码)都有一个标记行的语句。

相关问题