首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala插件不使用StackOverflowError编译

Scala插件不使用StackOverflowError编译
EN

Stack Overflow用户
提问于 2017-12-20 08:57:03
回答 2查看 4.3K关注 0票数 2

我在Maven项目中发现了一个与Scala-maven-plugin相关的bug。我有一个非常长的功能序列(为了机器学习的目的),我手工编码(74个元素)。

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

有关更多信息,以下是我编译的最后输出:

代码语言:javascript
复制
[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刚开始的时候:

代码语言:javascript
复制
[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编译("play“按钮),而不适用于Maven编译?

编辑:

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

代码语言:javascript
复制
      <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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-20 13:40:38

你可以:

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

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

票数 7
EN

Stack Overflow用户

发布于 2017-12-20 09:18:51

按顺序回答你的问题:

  • 是。有关问题和解决方案,请参见this
  • JVM有堆栈限制,现在我推测一下,但是当解析代码时通常使用堆栈,如果它是递归的(oi ),有一个很长的序列解析将占用更多的堆栈内存是有意义的。在maven和scala解析器的内存使用情况下,它太多了。
  • 要解决这个问题,请参阅上面的链接。
  • 就像我前面提到的,maven比intellij具有更多的堆栈内存消耗。编辑:我认为这更可能取决于编译器进程是如何启动的,如果我没有弄错它可能有不同的堆栈状态。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47902117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档