从ensime运行sbt时java.io.IOException?

时间:2011-08-10 02:26:22

标签: scala sbt ensime

我在mac os上试过了ensime / sbt。首先,我打开项目文件夹中的.scala文件,在命令行中使用sbt创建,然后我运行了ensime,它仍然工作正常,但每当我运行ensime-sbt(c-c c-v s)时,我得到了

java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:883)
at xsbt.boot.Locks$.apply0(Locks.scala:34)
at xsbt.boot.Locks$.apply(Locks.scala:27)
at scala.collection.Iterable$class.$init$(Proxy.scala:32)
at xsbt.boot.Launch$ScalaProvider.<init>(Launch.scala:107)
at xsbt.boot.Launch$$anonfun$1.apply(Launch.scala:83)
at org.apache.ivy.plugins.namespace.NamespaceRule.newEntry(Cache.scala:17)
at org.apache.ivy.plugins.namespace.NamespaceRule.apply(Cache.scala:12)
at xsbt.boot.Launch.getScala(Launch.scala:85)
at xsbt.boot.Launch$.run(Launch.scala:49)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:43)
at xsbt.boot.Launch$.launch(Launch.scala:68)
at xsbt.boot.Launch$.apply(Launch.scala:14)
at xsbt.boot.Boot$.runImpl(Boot.scala:24)
at xsbt.boot.Boot$.main(Boot.scala:15)
at xsbt.boot.Boot.main(Boot.scala)
    Error during sbt execution: java.io.IOException: No such file or directory

    Process sbt exited abnormally with code 1

我尝试从命令行使用sbt,一切都在那里工作(编译/运行/控制台)。我在mac os上的emacs24(2011/07/24)上使用了sbt 0.10.1和最新的二进制文件。

我知道我做错了吗?

5 个答案:

答案 0 :(得分:6)

我有这个,在应用strace之后我发现了这个问题。 ensime-sbt.el函数从cwd中搜索./project/build.properties。在找到这个目录/文件时,它假定这是根目录。

所以只需创建此文件,此问题就会消失。如果ensime默认创建这个文件会很好看,因为它是sbt函数工作所需的文件。

答案 1 :(得分:5)

我得到了同样的错误。这种情况似乎是sbt尝试但未能在用户的主目录中创建“.sbt”和“.ivy”目录。也许,原因是OS用户没有权限在用户的主目录中写入。

答案 2 :(得分:2)

这可能与许可相关,也许。

我检查了Locks.scala https://github.com/harrah/xsbt/blob/0.10/launch/Locks.scala来源,并且猜测“file.getParentFile.mkdirs()”由于权限拒绝而无效。

我昨天遇到了同样的问题,并在一分钟前运行,添加了sudo:

“sudo emacs xxx.scala”

答案 3 :(得分:1)

您可以更改sbt.ivy.home和ivy.home属性。因此,为了增加Joachim的第一个解决方案,您需要设置两个系统属性: 像这样: java -Dsbt.ivy.home = / tmp / .ivy2 / -Divy.home = / tmp / .ivy2 / -jar dirname $0 / sbt-launch.jar“$ @”

希望解决您的问题

答案 4 :(得分:-1)

当sbt尝试访问的主目录中的文件不属于尝试运行它的用户所拥有时,也会发生此错误。在主人的主管上运行chmod 777,问题就会解决。