如何调查mvn 尝试执行外部编译器的未知错误? 根据编译器插件源,在这种情况下,javac返回非零但mvn无法提取错误信息(唉mvn似乎在这种情况下吃了javac错误代码) - JavacCompiler.Java。我知道Mvn有解析java 7输出的问题,我尝试手动运行java,但我无法重现错误。
我正在使用mvn303,编译器插件2.5.1和java 1.7 07.
如果您对如何处理这种情况有任何想法,请告诉我。
谢谢
彼得
`[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)`
答案 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 ) );
}
}