我玩过Java 8 ea b72,但是我遇到了编译错误。有没有办法从javac获取更多信息,例如它目前正在处理的文件列表?如果我有一个大概的想法,我可以找到一个解决办法,直到问题得到解决。
仅为记录,这里是堆栈跟踪(如果在IntelliJ IDEA,BTW之外编译,它看起来类似):
An exception has occurred in the compiler (1.8.0-ea). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport) after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.AssertionError: arraycode A
at com.sun.tools.javac.jvm.Code.arraycode(Code.java:297)
at com.sun.tools.javac.jvm.Gen.makeNewArray(Gen.java:1827)
at com.sun.tools.javac.jvm.Gen.visitNewArray(Gen.java:1800)
at com.sun.tools.javac.tree.JCTree$JCNewArray.accept(JCTree.java:1482)
at com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:893)
at com.sun.tools.javac.jvm.Gen.genArgs(Gen.java:912)
at com.sun.tools.javac.jvm.Gen.visitApply(Gen.java:1746)
at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1391)
at com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:893)
at com.sun.tools.javac.jvm.Gen.visitReturn(Gen.java:1715)
at com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1310)
at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:683)
at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:718)
at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:704)
at com.sun.tools.javac.jvm.Gen.genStats(Gen.java:755)
at com.sun.tools.javac.jvm.Gen.visitBlock(Gen.java:1090)
at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:835)
at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:683)
at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:718)
at com.sun.tools.javac.jvm.Gen.genMethod(Gen.java:968)
at com.sun.tools.javac.jvm.Gen.visitMethodDef(Gen.java:941)
at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:723)
at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:683)
at com.sun.tools.javac.jvm.Gen.genClass(Gen.java:2310)
at com.sun.tools.javac.main.JavaCompiler.genCode(JavaCompiler.java:751)
at com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1545)
at com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1509)
at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:907)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:866)
at com.sun.tools.javac.main.Main.compile(Main.java:506)
at com.sun.tools.javac.main.Main.compile(Main.java:365)
at com.sun.tools.javac.main.Main.compile(Main.java:354)
at com.sun.tools.javac.main.Main.compile(Main.java:345)
at com.sun.tools.javac.Main.compile(Main.java:94)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:477)
at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess0(JavacCompiler.java:551)
at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(JavacCompiler.java:526)
at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:167)
at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:678)
at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:128)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:477)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:477)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:477)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:477)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
答案 0 :(得分:3)
这是一种最后的手段,但您可以尝试使用strace
来监控javac
正在打开的文件。 strace [your javac invocation] | grep '/directory/you/are/interested/in/
可能会给你一些线索。
答案 1 :(得分:2)
你试过javac的-verbose
标志吗?可以使用以下简单的ant脚本来启用详细的编译器输出,
<project name="verbose_compile" default="compile" basedir=".">
...
<target name="compile">
<javac srcdir="${src.dir}"
destdir="${build.dir}"
executable="${java8.home}/bin/javac"
classpath="..."
fork="true"
verbose="true" />
</target>
</project>
(看起来用户属性maven.compiler.verbose
会在maven中完成同样的事情。)
我刚遇到类似的情况。在Windows上,详细输出显示正在错误之前编译的类。希望这可以帮助您缩小解决问题的范围。
答案 2 :(得分:0)
这不是您问题的解决方案。也许你可以弄清楚这可能出了什么问题。
以下是抛出“AssertionError”的方法。
/** Given a type, return its code for allocating arrays of that type.
*/
public static int arraycode(Type type)
{
switch (type.tag)
{
case BYTE: return 8;
case BOOLEAN: return 4;
case SHORT: return 9;
case CHAR: return 5;
case INT: return 10;
case LONG: return 11;
case FLOAT: return 6;
case DOUBLE: return 7;
case CLASS: return 0;
case ARRAY: return 1;
default: throw new AssertionError("arraycode " + type);
}
}
你可以找到 com.sun.tools.javac.jvm.Code 类实现here(我找不到这个类的正确版本,因为这个类错误在第298行被抛出,在你的情况下是在297)。这可能有所帮助。
我找到了链接Bug ID = 4901611,在之前的Java版本中显示了类似的错误。版本是Java 1.5。在此链接中,您会发现当“使用vararg的泛型方法”获得意外输入导致AssertionError时会发生此类错误。没有解决方法,并在下次更新中修复:(