如何从Makefile启动Scala的sbt

时间:2013-12-18 18:45:51

标签: scala makefile sbt

我正在使用具有2 GB RAM并使用Scala version 2.10.3 (Java HotSpot(TM) Client VM, Java 1.6.0_26)sbt 0.13.0-M2的Ubuntu 10.04计算机。 我创建了一个包含20个源文件的Scala项目,并将其设置为使用sbt进行构建。

如果我以交互方式运行sbt(开始sbt并输入compile),一切正常。

如果我以批处理模式运行sbt,即使用命令行

$ sbt compile

一切都恢复正常。

现在我想在更复杂的构建中运行sbt(还涉及其他编程语言),所以我想从Makefile中启动sbt。我的目标看起来像这样:

SBT_JAVA_OPT=-J-Xss64m -J-Xms64m -J-Xmx1024m -J-XX:MaxPermSize=256m

build-sbt:
    @sbt ${SBT_JAVA_OPT} compile

调用

$ make build-sbt

sbt输出以下错误消息:

[info] Set current project to ... (in build file:...)
[error] java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: unable to create new native thread
[error] Use 'last' for the full log.

我再次启动sbt并调用

> last compile

但这没有提供任何信息。

我不明白为什么从sbt开始Makefile会产生影响。 make是否对其子进程可以使用的内存施加了一些限制?

所以:这是一个已知的问题吗?从sbt开始Makefile的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您的问题在我的debian机器上可以重现。请查看this article,其中讨论了通过减少分配给java VM的内存来解决此错误:

  

您为JVM提供的内存越多,您获取java.lang.OutOfMemoryError的可能性就越大:当您有许多线程时无法创建新的本机线程异常。

我按如下方式更改了Makefile,构建成功:

SBT_JAVA_OPT=-J-Xss64m -J-Xms64m -J-Xmx512m -J-XX:MaxPermSize=256m
#                                      ^^^ less memory

build-sbt:
    /usr/bin/sbt -verbose -debug ${SBT_JAVA_OPT} compile

答案 1 :(得分:0)

如果你开始使用java 8,你甚至不需要再设置max perm大小了。只是一个信息,以防您考虑迁移到Java 8