En essayant de compiler un projet Maven en utilisant JDK 9.0.1, je suis confronté à cette trace de pile sans beaucoup d'explication:
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:250)
at jdk.compiler/com.Sun.tools.javac.main.JavaCompiler.readSourceFile(JavaCompiler.Java:821)
at jdk.compiler/com.Sun.tools.javac.processing.JavacProcessingEnvironment$ImplicitCompleter.complete(JavacProcessingEnvironment.Java:1510)
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:1314)
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:134)
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:51)
at org.Apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.Java:128)
at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:309)
at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:194)
at org.Apache.maven.DefaultMaven.execute(DefaultMaven.Java:107)
at org.Apache.maven.cli.MavenCli.execute(MavenCli.Java:993)
at org.Apache.maven.cli.MavenCli.doMain(MavenCli.Java:345)
at org.Apache.maven.cli.MavenCli.main(MavenCli.Java:191)
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)
Vous ne savez pas vraiment ce qui cause cela, est-ce un bug dans le JDK?
Détails supplémentaires :
Ajoutez simplement ceci
<forceJavacCompilerUse>true</forceJavacCompilerUse>
à votre plugin de compilation du compilateur maven dans votre POM et vous verrez toutes les erreurs javac! Source avec plus de détails
La partie de la trace de pile
at jdk.compiler/com.Sun.tools.javac.main.JavaCompiler.readSourceFile(JavaCompiler.Java:821)
se rapporte à la ligne de code
throw new CompletionFailure(c, diags.fragment("cant.resolve.modules"));
Cela pourrait se produire lorsque vous essayez de créer un module maven qui n'est pas basé sur Java9 et/ou n'a pas de déclaration de module (correcte) module-info.Java
avec une version de sortie spécifiée comme 9 où il ne pourra pas résoudre les modules avec/sans la déclaration.
MISE À JOUR
La plupart du temps, cette erreur semble se produire, lorsque le compilateur essaie de signaler une erreur de compilation, mais elle explose au cours du processus. Jusqu'à présent, principalement deux approches ont aidé à résoudre ces problèmes:
-proc:none
argument du compilateur (il semble que le traitement des annotations puisse bouleverser le compilateur, donc si vous n'êtes pas censé en utiliser, c'est une victoire gratuite).SOLUTION ORGINALE
Après de nombreux essais et erreurs, j'ai pu contourner/résoudre ce problème localement, mon approche à la fin a été la suivante:
Je ne sais toujours pas comment une dépendance de portée de test pourrait avoir un effet sur la compilation du projet ... Il s'est également avéré que javax.servlet: servlet-api: 3.0.1: fourni figurait déjà parmi les dépendances du module défaillant, et la dépendance de portée de test n'a en fait été utilisée pour rien.
Au final, je viens de supprimer la dépendance de servlet-api de portée de test incorrectement définie du module de déclenchement de bogue et soudainement Maven a pu compiler le module précédemment défaillant.
Je suis assez sûr que c'est une réponse très obscure à une question très obscure en premier lieu, mais j'espère que mon approche sera utile à quelqu'un d'autre.