【问题标题】:Scala maven plugin doesn't compile with StackOverflowErrorScala maven 插件无法使用 StackOverflowError 编译
【发布时间】:2018-06-02 18:46:45
【问题描述】:

我在我的 Maven 项目中发现了一个与 Scala-maven-plugin 相关的错误。我有很长的特征序列(用于机器学习目的)我手工编码(74 个元素)。

我在序列中添加了一个元素,但它不再编译。如果我评论这个序列的任何元素,元素的数量会减少并且它会编译。

更多信息,这里是我编译的最终输出:

[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.3.1:compile (default) on project SecretProject: wrap: org.apache.commons.exec.ExecuteException: Process exited with an error: 240 (Exit value: 240) -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[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/MojoExecutionException

加上 StackTrace 的开头:

[INFO] Compiling 13 source files to /home/belka/Bureau/SecretProject/target/classes at 1513759339071
[ERROR] error: java.lang.StackOverflowError
[INFO]  at scala.reflect.internal.TreeInfo.isSelfConstrCall(TreeInfo.scala:296)
[INFO]  at scala.reflect.internal.TreeInfo.isSelfOrSuperConstrCall(TreeInfo.scala:344)
[INFO]  at scala.reflect.internal.Trees$UnderConstructionTransformer$class.transform(Trees.scala:1701)
[INFO]  at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:291)
[INFO]  at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:457)
[INFO]  at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:352)
[INFO]  at scala.reflect.internal.Trees$class.itransform(Trees.scala:1345)

(修改后的项目名称)

  • 有人遇到过Scala-maven-plugin 的类似问题吗?
  • Scala-maven-plugin 解析器(在编译器中)是否对序列解析有任何硬限制?
  • 如何解决并编译我的项目?
  • 为什么它适用于 IntelliJ 编译(“播放”按钮)但不适用于 Maven 编译?

编辑:

我正在添加包含我的Scala-maven-plugin 片段的 pom.xml 片段:

      <plugin>
        <!-- see http://davidb.github.com/scala-maven-plugin -->
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>3.3.1</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
              <goal>testCompile</goal>
            </goals>
            <configuration>
              <args>
                <arg>-dependencyfile</arg>
                <arg>${project.build.directory}/.scala_dependencies</arg>
              </args>
              <jvmArgs>
                <jvmArg>-Xms512m</jvmArg>
                <jvmArg>-Xmx4096m</jvmArg>
              </jvmArgs>
            </configuration>
          </execution>
        </executions>
      </plugin>

【问题讨论】:

  • 你得到什么错误?请举一个重现问题的小例子。
  • 我添加了有关堆栈跟踪的信息 + 以重现问题,您可以创建一个包含 74 个元素的序列,然后在第 75 个时它不应再编译了。
  • 我尝试创建一个由 200 个元素组成的手动添加的序列,效果很好。请提供一个最小的、可验证的完整示例,以便我们重现您的问题。
  • 感谢您的回答和您的时间。你能提供我你的jdk版本吗?你试过用 maven 编译吗?
  • 可以分享一下 pom.xml 片段和 scala-maven-plugin 的配置吗?

标签: scala maven scala-maven-plugin


【解决方案1】:

你可以:

  • 反递归代码或使用尾递归
  • 或通过-Xss增加用于运行scalac的jvm的最大堆栈大小

          <jvmArgs>
            <jvmArg>-Xss4m</jvmArg>
            <jvmArg>-Xms512m</jvmArg>
            <jvmArg>-Xmx4096m</jvmArg>
          </jvmArgs>
    

我猜 IDEA 已经增加了默认的最大堆栈大小(64 位 VM 中的 iirc 1024k)。

【讨论】:

  • 谢谢!这解决了我的问题。您是否有任何文档说明您如何找到此解决方案或为什么它可以解决我的问题?为什么这么小的堆大小就足够了?
  • Xss代表栈大小,Xms/Xmn代表堆大小(4G不是小堆大小)。您可以搜索堆栈大小和堆大小之间的差异(对于 jvm)。我找到了解决方案,因为几年前我已经遇到了这个问题,因为应用程序过于递归,或者应用程序无限递归。
  • 4M 的堆栈大小如何?
【解决方案2】:

按顺序回答您的问题:

  • 是的。有关问题和解决方案,请参阅this
  • JVM 有一个堆栈限制,现在我推测一下,但是在解析代码时通常会使用堆栈,如果它是递归的 (oi vey),那么解析很长的序列将占用更多堆栈内存是有道理的。显然,在 maven 和 scala 解析器的内存使用下,它太多了。
  • 要解决它,请参见上面的链接。
  • 可能就像我上面提到的,maven 比 intellij 有更多的堆栈内存消耗。编辑:我认为这更可能取决于编译器进程的启动方式,如果我没记错的话,它可能有不同的堆栈状态。

【讨论】:

  • 我看到了建议的解决方案,但这不适合我的问题。编译阶段会占用我 4-5% 的内存...
  • @belka 你可用内存还是JVM的堆栈大小内存?无论可用系统内存如何,堆栈大小都是有限的。
  • 我的可用内存; JVM 堆栈大小设置为 4096M,远高于消耗的内存
  • @belka 更正 4096M 不是您的最大堆栈大小,而是您的最大“堆”内存
猜你喜欢
  • 1970-01-01
  • 2015-01-07
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多