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

JDK10: Compiler plugin trips AssertionError inside javac when using javax.tools API

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 3.7.0
    • Fix Version/s: None
    • Labels:
      None

      Description

      Maven 3.5.3, 64-bit linux, Oracle JDK 10.0.1

      Compilation fails with a crash  inside javac unless the maven-compiler-plugin is configured with

      <forceJavacCompilerUse>true</forceJavacCompilerUse>

      I had a brief look at the sources of Modules.java in the current OpenJDK10 and it looks like this is the assertion that gets tripped (line numbers do not match exactly but it's close enough):

          public boolean enter(List<JCCompilationUnit> trees, ClassSymbol c) {
              Assert.check(rootModules != null || inInitModules || !allowModules);
              return enter(trees, modules -> {}, c);
          }
      

      Since the crash does not happen when invoking the compiler using commandline arguments I suspect the plugin does something unexpected with the javax.tools JavaCompiler API that later trips the exception.

      Unfortunately this is a commercial project so I cannot provide a test case The project itself is a JDK8 project we're currently migrating to JDK10 and while the project itself has no module-info files some of our dependencies do (at least Automatic-Module-Name gets set in their manifests).

      I'll attach the output of a compile run with the '-verbose' option to this ticket.

      Plugin configuration:

      <build>
        <plugins>
              <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                  <source>10</source>
                  <target>10</target>
                  <release>10</release>
                  <!-- <forceJavacCompilerUse>true</forceJavacCompilerUse> -->
                  <compilerArgs>
                      <arg>-Werror</arg>
                      <arg>-verbose</arg>
                  </compilerArgs>
                </configuration>
              </plugin>
        </plugins>
      </build>
      

      Exception:

      Exception in thread "main" java.lang.AssertionError
              at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:155)
              at jdk.compiler/com.sun.tools.javac.util.Assert.check(Assert.java:46)
              at jdk.compiler/com.sun.tools.javac.comp.Modules.enter(Modules.java:244)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.readSourceFile(JavaCompiler.java:829)
              at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ImplicitCompleter.complete(JavacProcessingEnvironment.java:1506)
              at jdk.compiler/com.sun.tools.javac.code.Symbol.complete(Symbol.java:633)
              at jdk.compiler/com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:1308)
              at jdk.compiler/com.sun.tools.javac.code.Type$ClassType.complete(Type.java:1139)
              at jdk.compiler/com.sun.tools.javac.code.Type$ClassType.getTypeArguments(Type.java:1065)
              at jdk.compiler/com.sun.tools.javac.code.Printer.visitClassType(Printer.java:237)
              at jdk.compiler/com.sun.tools.javac.code.Printer.visitClassType(Printer.java:52)
              at jdk.compiler/com.sun.tools.javac.code.Type$ClassType.accept(Type.java:992)
              at jdk.compiler/com.sun.tools.javac.code.Printer.visit(Printer.java:136)
              at jdk.compiler/com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArgument(AbstractDiagnosticFormatter.java:197)
              at jdk.compiler/com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArguments(AbstractDiagnosticFormatter.java:165)
              at jdk.compiler/com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:111)
              at jdk.compiler/com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:67)
              at jdk.compiler/com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArgument(AbstractDiagnosticFormatter.java:183)
              at jdk.compiler/com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArguments(AbstractDiagnosticFormatter.java:165)
              at jdk.compiler/com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:111)
              at jdk.compiler/com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:67)
              at jdk.compiler/com.sun.tools.javac.util.JCDiagnostic.getMessage(JCDiagnostic.java:771)
              at jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$DiagnosticSourceUnwrapper.getMessage(ClientCodeWrapper.java:799)
              at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:131)
              at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:174)
              at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1075)
              at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:168)
              at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
              at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
              at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
              at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
              at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
              at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
              at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
              at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
              at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
              at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
              at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
              at org.apache.maven.cli.MavenCli.execute(MavenCli.java:956)
              at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:290)
              at org.apache.maven.cli.MavenCli.main(MavenCli.java:194)
              at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
              at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.base/java.lang.reflect.Method.invoke(Method.java:564)
              at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
              at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
              at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
              at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
      

        Attachments

        1. sample_project.tgz
          4 kB
          Tobias Gierke
        2. log.txt
          1.01 MB
          Tobias Gierke

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              tgierke2342 Tobias Gierke
            • Votes:
              5 Vote for this issue
              Watchers:
              11 Start watching this issue

              Dates

              • Created:
                Updated: