如何找到有关mvn“尝试执行外部编译器的未知错误”的更多信息

时间:2012-09-19 18:43:51

标签: maven compiler-errors

如何调查mvn 尝试执行外部编译器的未知错误? 根据编译器插件源,在这种情况下,javac返回非零但mvn无法提取错误信息(唉mvn似乎在这种情况下吃了javac错误代码) - JavacCompiler.Java。我知道Mvn有解析java 7输出的问题,我尝试手动运行java,但我无法重现错误。

我正在使用mvn303,编译器插件2.5.1和java 1.7 07.

  • mvn clean compile -X - 失败,错误
  • 复制粘贴mvn失败/ bin / sh用于javac调用 - sh + javac完成没有错误代码

如果您对如何处理这种情况有任何想法,请告诉我。

谢谢

彼得

`[ERROR] / bin / sh -c cd / myproj / modules / memory&& /usr/java/jdk1.7.0_07/jre/../bin/javac @ / myproj / modules / memory / target / classes / org.codehaus.plexus.compiler.javac.JavacCompiler4013958444740287519arguments -J-Xmx512m -J-Xms512m [错误] - > [帮助1] org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标org.apache.maven.plugins:maven-compiler-plugin:2.3.2:在项目内存上编译(default-compile):致命错误编译     在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)     在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)     ...     ...

org.codehaus.plexus.compiler.javac.JavacCompiler.compileOutOfProcess(JavacCompiler.java:488)     在org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:157)`

1 个答案:

答案 0 :(得分:2)

我们找到了问题的原因 - 没有内存用于分叉。我们在后台有java进程,并将编译器插件设置为fork。当maven尝试fork它失败时导致错误代码但没有错误信息(至少没有插件可以理解)。

仅供参考,我认为我们可以对JavaCompiler代码做出改进。目前,没有消息的失败会产生一般错误陈述。但是,我们确实有一个returnCode,并且可以将其添加到文本中,当我们遇到这种情况时,会提供更多的面包屑。

        if ( ( returnCode != 0 ) && messages.isEmpty() )
                {
                    if ( err.getOutput().length() == 0 )
                    {
                        throw new CompilerException( "Unknown error trying to execute the external compiler: " + EOL
                            + cli.toString() );
                    }
                    else
                    {
                        messages.add( new CompilerError( "Failure executing javac,  but could not parse the error:" + EOL
                            + err.getOutput(), true ) );
                    }
                }