java - 为什么eclipse编译shell javac或mvn产生错误: code too large?的文件

标签 java eclipse shell enums

环境:

  • eclipse
  • 行家 3.2.3
  • Java 7

我看过 questions像这样,但我不明白的是为什么 eclipse 可以编译这个文件,而我们不能通过 shell 来完成。

我也知道这个文件必须是一个属性文件,但它是我在项目中找到的。

Eclipse 编译 de 文件并创建字节码 Messeges.class,但 javac 和 mvn 都不能这样做,因为错误:代码太大。

这个文件 Messages.java 是一个有 3232 行的枚举,用作将所有这些加载到内存中的属性。它有大约 3100 种不同的元素。

Messages.java

public enum Messages {
  MENU_MANAGEMENT("Management menu"),
  ...3100..
  MENU_OTHER("Other");

  private String name;

  private Messages(String name) {
    this.name = name;
  }
  ...
}

错误

$javac Messages.java
Messages.java:11: error: code too large
        MENU_MANAGEMENT("Management menu"),
        ^
1 error

eclipse 如何或为什么编译它?我不明白 Eclipse 是如何做到这一点的?

最佳答案

当枚举常量的数量高于 2000 时,eclipse 会生成合成方法来绕过代码大小限制。

参见 https://bugs.eclipse.org/bugs/show_bug.cgi?id=331334

顺便说一句:在你的 Maven 构建中切换到 ecj 作为编译器也不是一个长期的解决方案:这个解决方案只在 Java 9 之前有效,因为自 https://bugs.java.com/view_bug.do?bug_id=JDK-8157181 以来不允许在初始化方法之外初始化 final 字段。

关于java - 为什么eclipse编译shell javac或mvn产生错误: code too large?的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50502600/

相关文章:

Java Servlet/Jsp 图像上传以及表单值

java - 重新抛出异常的ExecutorService

java - 在 java 的 simpledateformat 中强制 4 位数年份

java - 如何使用命令行源安装 Maven Artifact ?

php - 使用 PHP 执行 shell 命令

macos - 如何通过在 Mac OS X 中给出进程名称来获取进程的 PID?

linux - 如何使用需要混合使用 sudo 和 sudo -u 用户名权限的命令来制作脚本?

java - 如何在 Gson 上全局注册类型适配器?

java - 包 org.apache.hadoop.ipc.protobuf 为空

java - 无法在我的 Mac 上安装 Java 1.8