【问题标题】:maven "Compilation failure" but no issue displayedmaven“编译失败”但没有显示问题
【发布时间】:2018-08-22 01:14:30
【问题描述】:

在运行mvn install 时,构建会间歇性地失败并出现Compilation failure,尤其是在AbstractCompilerMojo.java:1165,但不会显示任何警告或错误。在 maven-compiler-plugin 中设置<verbose>true</verbose> 无效。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.209 s (Wall Clock)
[INFO] Finished at: 2018-03-13T16:49:32Z
[INFO] Final Memory: 147M/611M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project PROJECTNAME: Compilation failure -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project PROJECTNAME: Compilation failure
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
    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.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:200)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:196)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:511)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:624)
    at java.lang.Thread.run (Thread.java:748)
Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:1165)
    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.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:200)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:196)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:511)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:624)
    at java.lang.Thread.run (Thread.java:748)
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

【问题讨论】:

    标签: maven-compiler-plugin


    【解决方案1】:

    如下所示将参数“-verbose”传递给 compilerArgs 以获取失败的详细信息。

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <verbose>false</verbose>
            <fork>true</fork>
            <source>${jdk.version}</source>
            <target>${jdk.version}</target>
            <!-- false means true here -->
            <useIncrementalCompilation>true</useIncrementalCompilation>
            <compilerArgs>
                <arg>-J-Xss512m</arg>
                <arg>-J-noverify</arg>
                <arg>-verbose</arg>
                <arg>-Xlint:all,-options,-path</arg>
            </compilerArgs>
        </configuration>
    </plugin>
    

    【讨论】:

      【解决方案2】:

      我设法使用相同的参数手动调用javac,并输出以下错误

      The system is out of resources.
      Consult the following stack trace for details.
      java.lang.StackOverflowError
              at com.sun.tools.javac.code.Type.map(Type.java:220)
              at com.sun.tools.javac.code.Type.map(Type.java:220)
              at com.sun.tools.javac.code.Type.map(Type.java:220)
              at com.sun.tools.javac.code.Type.map(Type.java:220)
              at com.sun.tools.javac.code.Type.map(Type.java:220)
              ...
      

      可以通过使用-J-Xss4m 将堆栈大小增加到 4 MB 来解决此问题

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
          <inherited>true</inherited>
          <configuration>
              <compilerArgs>
                  <arg>-J-Xss4m</arg>
              </compilerArgs>
          </configuration>
      </plugin>
      

      问题的根本原因是 3000 行 Map 字段初始化。所以真正的解决方案是将这些数据移动到一个文件中。

      与此问题类似:https://github.com/google/guava/issues/2234

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-02
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        相关资源
        最近更新 更多