【问题标题】:java.io.IOException when running sbt from ensime?从 ensime 运行 sbt 时出现 java.io.IOException?
【发布时间】:2011-08-10 02:26:21
【问题描述】:

我在 mac os 上尝试过 ensime/sbt。首先,我在命令行中使用 sbt 创建项目文件夹中的 .scala 文件,然后我运行 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 和最新的二进制 ensime。

知道我做错了吗?

【问题讨论】:

  • 嗨 - 你有没有得到这个工作?
  • 是的,非常感谢。我没有收到任何回答通知,所以我不知道有人已经回答了这个问题。

标签: scala sbt ensime


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我遇到了同样的错误。这种情况似乎是 sbt 尝试但未能在用户的主目录中创建“.sbt”和“.ivy”目录。可能是因为操作系统用户没有权限写入用户的主目录。

    【讨论】:

    • 我下载了 sbt 0.12.4 并尝试创建 ~/.ivy2。就我而言, ~/.ivy2 是一个损坏的符号链接。当我将符号链接更改为有效的目录时,sbt 能够运行。
    【解决方案3】:

    这可能与许可有关。

    我检查了 Locks.scala https://github.com/harrah/xsbt/blob/0.10/launch/Locks.scala 源,并猜测“file.getParentFile.mkdirs()”因为权限被拒绝而没有工作。

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

    “sudo emacs xxx.scala”

    【讨论】:

      【解决方案4】:

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

      希望能解决你的问题

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2013-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多