【问题标题】:Java compilation errors limited to 100Java 编译错误限制为 100
【发布时间】:2011-03-08 03:07:27
【问题描述】:

我有一个 Java 文件,当我编译它时,在 java 编译器(javac)退出后,我只能在控制台上看到前 100 个错误。如何在控制台上查看所有编译错误? 在此先感谢-opensid

【问题讨论】:

  • 很可能是一个错误导致了所有后续错误。如果您解决了根本原因,则其余所有错误都无关紧要。
  • 经过进一步思考,可能有一个模糊的理由想要查看总数。也许是为了衡量某些特定代码库的糟糕程度?不过对我来说似乎还是有点可疑。
  • 由于绝大多数错误消息可能是幻像消息,@Peter Recore,是的,这将是一个可疑的指标。 ;)
  • 感谢所有 -Xmaxerrs 我能够得到所有错误!!!
  • 也许你应该借一本书来学习Java。 ibiblio.org/java/books.html 或者只是按照 suns 网站上的 Java 教程进行操作 java.sun.com/docs/books/tutorial...

标签: java javac


【解决方案1】:

一般编译器会在 100 次错误后放弃。在此之后的大多数错误很可能是由第一个错误引起的。如果您必须有更多错误,请查看 javac 选项 -Xmaxerrs-Xmaxwarns

【讨论】:

  • -- 例如 Xmaxerrs 1000。省略参数中的等号。
  • 如果我想将此值传递给`org.apache.tools.ant.taskdefs.Javadoc`的Javadoc`如何指定这些值?
  • 例如:javadoc.createArg().setValue("-J-XX:MaxPermSize=" + vmMaxPermSize); Xmaxerrs 和 Xmaxwarns 的数据类型是什么?整数类型可以吗?
【解决方案2】:

您是否尝试过-Xmaxerrors 命令行选项?转到here 并搜索“maxerrors”

【讨论】:

    【解决方案3】:

    如果您使用的是 Windows 操作系统,请尝试使用命令提示符编译您的源代码。然后该命令提示符不会因错误而退出。

    【讨论】:

    • 然后你可以使用终端编译它。如果仍然看不到,请使用 printStack 方法将错误消息打印到文件中。
    • 是的 Purushotham,我正在使用终端,但我遇到了编译错误,我想知道超过 100 个错误,使用“javac -Xmaxerrs 200”我可以看到 200 个错误。
    【解决方案4】:

    如果您使用的是 Eclipse,Preferences > Java > Compiler > Building > General 将允许您为每个单元指定更多问题。

    【讨论】:

      【解决方案5】:

      在编译文件时,Java 编译器会在出现一定数量的错误后放弃,因为 Java 是一种在错误后难以将源代码重新同步到预期状态的语言。这意味着一个放错位置的分号会产生许多与实际错误几乎没有关系的错误(在某些极端情况下甚至更多——方式更多)。在源代码中打印出“所有错误”是没有意义的,因为它们中的大多数可能是幻像错误。

      修复您可以在编译器输出中找到的前几个清晰易懂的错误,然后重试。 (不要忘记在源代码的其余部分中查找这些错误的变体!)每次编译运行时获取更多错误消息可能无济于事,实际上只会让人感到困惑和沮丧。

      【讨论】:

      • 我很想知道简单的错误会导致多少错误。
      • 你不会找到它。这才是重点。大多数错误是由解析器限制(以及 Java 几乎不可解析的性质)引起的幻像错误。你会发现编译器真的很愚蠢,无法区分真正的错误与“错误机会的错误”。
      • 我不知道为什么您认为 Java 是“在出错后难以将源重新同步到预期状态的语言之一”和“几乎无法解析”。它是一种非常标准的分号终止语言,几十年来我们一直在构建可靠的解析器,并且解析器确实具有错误恢复功能,从 1970 年代(如果不是更早)开始。级联编译错误通常是由于未声明的标识符和其他语义错误。
      • 然而,许多其他语言在面对此类语义错误时,不会吐出数十到数百条错误消息。他们似乎很聪明,可以在以后的代码中找出此类错误导致的原因,并因此知道如何忽略它。 C、C++ 和 Java 编译器似乎无法解决这个问题。
      • Eclipse,(以及我确定的所有其他 ide)似乎在恢复时没有太大问题。当我有错误时,他们不会用波浪线将我的整个屏幕涂成红色,只是在适当的部分。
      【解决方案6】:

      如果你使用的是 gradle:

      allprojects {
        gradle.projectsEvaluated {
          tasks.withType(JavaCompile) {
              options.compilerArgs << "-Xmaxerrs" << "1000"
          }
        }
      }
      

      【讨论】:

        【解决方案7】:

        如果您使用 ant,请务必使用

        <compilerarg value="-Xmaxerrs"/>
        <compilerarg value="5"/>
        

        而不是

        <compilerarg value="-Xmaxerrs 5"/>
        

        我总是忘记。

        【讨论】:

        • 如果您想使用“-Xmaxerrs 5”,您可以使用替代&lt;compilerarg line="-Xmaxerrs 5" /&gt;
        【解决方案8】:

        如果您使用的是 ant,以下将起作用:

        <compilerarg line="-Xmaxerrs 10000" />
        

        请注意,您使用的是“line”参数,而不是上面答案中的“value”参数https://stackoverflow.com/a/42396745/2200690

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-12
          • 2013-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-06
          • 1970-01-01
          相关资源
          最近更新 更多