Uploaded image for project: 'Maven Compiler Plugin'
  1. Maven Compiler Plugin
  2. MCOMPILER-325

StackOverflowError from javac is not reflected in output when fork=true

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Not A Problem
    • Affects Version/s: 3.7.0
    • Fix Version/s: None
    • Labels:
      None

      Description

      Context: https://stackoverflow.com/questions/48775213/maven-compilation-error-without-any-errors-from-the-compiler

      If the Java code being compiled contains a chain of method calls that is too long to fit in javac's stack, javac will throw a StackOverflowError and exit.

      The resulting output indicates that javac errored, but does not show the SOE, nor which source file caused it. (It'd be nice if it actually pointed out the problem, but that's on javac, not on the Maven plugin.)

      For more recent versions of the plugin, if verbose=true, the plugin output includes the files being compiled as they go, and so the last file output is helpful, but it still doesn't indicate what went wrong. -X and -e args to Maven are also not helpful.

      In my case, the failure occurred using default settings for stack size (I think it's 1MB) when compiling a test case that chained together 673 builder methods, e.g.

      return new MyBuilder().foo(a1).foo(a2).foo(...).foo(a672).foo(a673).build();

      I assume this problem is not unique to StackOverflowErrors and would affect any thrown Error from javac.

      The plugin should be updated to capture javac's error output and include it when applicable.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                rfscholte Robert Scholte
                Reporter:
                jakerobb Jake Robb
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: