1

如何调查尝试执行外部编译器的 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 完成且没有错误代码

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

谢谢

彼得

`[错误] /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 [ERROR] -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: 未能执行目标 org.apache.maven.plugins:maven- compiler-plugin:2.3.2:compile (default-compile) on project memory:致命错误在 org.apache.maven.lifecycle 的 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217) 编译.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)`

4

1 回答 1

2

我们找到了问题的原因 - fork 没有内存。我们在后台有 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 ) );
                    }
                }
于 2012-09-19T21:34:52.133 回答