Why does sbt compile fail with StackOverflowError?

后端 未结 8 1252
孤独总比滥情好
孤独总比滥情好 2021-01-31 15:30

I am working on a Scala project that has been in existence for a few years but is new to me. My task is to upgrade it from Scala 2.9.3 to 2.11.7, along with its dependencies. I

相关标签:
8条回答
  • 2021-01-31 15:53

    I was unable to get this to work via the provided answers. build.sbt settings and the sbtopts file both failed to solve this error for me. What I had to do was run sbt with the -mem flag, for example:

    sbt -mem 2048 compile
    

    and now my projects built. If using IntelliJ you can also go to

    Preferences > Build, Execution, Deployment > Build Tools > sbt 
    

    and set Maximum heap size, MB to whatever target you need.

    0 讨论(0)
  • 2021-01-31 15:53

    I too run into this problem recently and I discovered a working solution for it with sbt 1.3.13.

    1. create a .sbtopts file under project root
    2. add -J-Xss100M (or any thread stack size you think suitable) to the .sbtopts file
    0 讨论(0)
  • 2021-01-31 15:55

    Relevant parts from the output of sbt -h:

      # jvm options and output control
      JAVA_OPTS          environment variable, if unset uses ""
      .jvmopts           if this file exists in the current directory, its contents
                         are appended to JAVA_OPTS
      SBT_OPTS           environment variable, if unset uses ""
      .sbtopts           if this file exists in the current directory, its contents
                         are prepended to the runner args
    

    Thus, in my case I solved the problem by creating a file .sbtopts with content

    -J-Xmx4G 
    -J-Xss4M
    

    in the project directory.

    Note: Running sbt -d shows what settings have been used, for instance:

    $ sbt -d
    [addSbt] arg = '-debug'
    [process_args] java_version = '8'
    # Executing command line:
    java
    -Xms1024m
    -XX:ReservedCodeCacheSize=128m
    -XX:MaxMetaspaceSize=256m
    -Xmx2G
    -Xss2M
    -jar
    /path/to/sbt-launch.jar
    -debug
    
    0 讨论(0)
  • 2021-01-31 15:55

    I discovered the SBT_OPT setting in the bin/sbt file of my sbt install was affecting the memory values set in my projects build.sbt

    updating the existing -Xss value in this file from 1M to 8M raised the memory size of the Scalac stack to a point I stopped getting StackOverflow exceptions in the sbt-invoked compiler. This seemed odd because the sbt documented approach to setting stack size in the compiler is to do this is with the -J-Xss setting.

    Sbt doesn't seem to actually enable you to set the compiler's stack memory. While a build.sbt accepts the following configuration as a valid setting, it doesn't seem to apply the value in the compiler:

    scalacOptions in ThisBuild ++= Seq(-J-Xss8M)

    I suspect that is a bug or non-implemented functionality

    0 讨论(0)
  • 2021-01-31 15:55

    There are multiple Correct Answers already. But what worked for me is below,

    // Created and Added a File: .jvmopts in the Project Root Folder with below Parameters.
    -Xms3022m
    -Xmx4048m
    -Xss124m
    -XX:MaxPermSize=4048m
    -XX:MaxMetaspaceSize=512m
    -XX:+CMSClassUnloadingEnabled
    -XX:ReservedCodeCacheSize=128m
    
    0 讨论(0)
  • 2021-01-31 15:57

    I figured it out. Once I knew that the -d flag would tell me what settings SBT was actually using, I saw that the values in my SBT_OPTS environment variable were being clobbered by other, lower settings. Where were those coming from? From my JAVA_OPTS env variable! I should have noticed them sooner, but now I know I can keep those Java options as they are and override them by adding the SBT-specific settings to my /usr/local/etc/sbtopts file, using the somewhat awkward format of

    -J-Xmx2G
    -J-Xss2M 
    

    Using the values shown I was able to run sbt compile successfully on my project.

    I hope someone finds this useful.

    0 讨论(0)
提交回复
热议问题