2

我尝试使用 scala 语言的简单示例。我安装sbt成功。运行时,sbt -h我看到来自 sbt 的帮助消息:

Usage: sbt [options]

  -h | -help         print this message
  -v | -verbose      this runner is chattier
  -d | -debug        set sbt log level to debug
  -no-colors         disable ANSI color codes
  -sbt-create        start sbt even if current directory contains no sbt project
  -sbt-dir   <path>  path to global settings/plugins directory (default: ~/.sbt)
  -sbt-boot  <path>  path to shared boot directory (default: ~/.sbt/boot in 0.11 series)
  -ivy       <path>  path to local Ivy repository (default: ~/.ivy2)
  -mem    <integer>  set memory options (default: 1536, which is -Xms1536m -Xmx1536m -XX:MaxPermSize=384m -XX:ReservedCodeCacheSize=192m) ....

但是当我尝试在带有 scala 作业的目录中运行时(这是 Coursera 课程),我发现了错误:

nazar_art@nazar-desctop:~/scala/example$ sbt
Detected sbt version 0.12.1
Starting sbt: invoke with -help for other options
Error occurred during initialization of VM
Could not reserve enough space for object heap

但它应该打开 sbt 命令提示符。像这样:

shell$ cd /path/to/progfun-project-directory                        # This is the shell of the operating system
shell$ sbt
> _                                                                 # This is the sbt shell

更新:

在我添加以下行之后

java -Xms64M -Xmx256M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=64M -jar目录名 $0/sbt-launch.jar "$@"

/usr/bin我看到下一个输出:

nazar_art@nazar-desctop:/usr/bin$ sbt
bash: /usr/bin/sbt: Permission denied
nazar_art@nazar-desctop:/usr/bin$ sudo sbt
sudo: sbt: command not found

- 为什么会这样?
- 如何解决这个问题?

4

2 回答 2

2

首先,示例文件夹名称(以及您安装 sbt 的文件夹名称)不能包含“!”。这可能也适用于其他特殊字符。甚至,我建议将 SBT 安装在路径上没有空间的文件夹中(对于示例文件夹也是如此)。

例如,如果您在如下路径上安装了 SBT(或示例文件夹):

/Users/dashti/My Programs/sbt-0.12.1

您可以重新安装它的路径,如:

/Users/dashti/MyPrograms/sbt-0.12.1

通过应用此命名更改,如果错误消失,请忽略本文的其余部分。

否则,要修复上述错误,首先找到 sbt 可执行脚本,然后对其进行编辑并更正其中的任何问题:

如果您使用的是基于 UNIX 的操作系统,请按照以下步骤操作:

1- 查找 SBT:打开终端并输入以下命令:

which sbt

您将收到如下路径:

/Users/dashti/Documents/scala-2.10.0/bin/sbt

在这个文件中,有一个执行java程序的命令,比如:

java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=128M -jar `dirname $0`/sbt-launch.jar "$@"

2-编辑 sbt 脚本:通过在终端中输入以下命令:

vim /Users/dashti/Documents/scala-2.10.0/bin/sbt

您将能够编辑此文件,也许您应该将内存使用参数更改为较低的规格(您应该考虑是否有足够的 RAM 来运行 sbt)。例如,这将是一个更好的选择:

java -Xms64M -Xmx256M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=64M -jar `dirname $0`/sbt-launch.jar "$@"
于 2013-08-09T23:11:34.340 回答
1

SBT 需要分配给 JVM 的更多内存。

这可以在build.sbt

javaOptions ++= Seq(
    "-Xms64m",
    "-Xmx256M",
    "-XX:+CMSClassUnloadingEnabled",
    "-XX:MaxPermSize=64M"
);

创建一个sbt文件(无扩展)并运行./sbt更好,但下面的代码(@MohammadDashti 的建议)sbt-launch.jar需要在项目文件夹中。

java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled \
-XX:MaxPermSize=128M -jar `dirname $0`/sbt-launch.jar "$@"

稍后,您可以javaagent:/path/to/jrebel -Drebel.remoting_plugin=true使用免费的 JRebel for Scala 许可证在保存时添加和重新部署更改。

于 2013-08-10T00:30:04.983 回答