建立火花项目,我试图使用sbt。发生以下异常:
java.io.IOException: No locks available
at sun.nio.ch.FileChannelImpl.lock0(Native Method)
at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:871)
at java.nio.channels.FileChannel.tryLock(FileChannel.java:962)
at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:88)
at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:81)
at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:102)
at xsbt.boot.Using$.withResource(Using.scala:11)
at xsbt.boot.Using$.apply(Using.scala:10)
at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:62)
at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:52)
at xsbt.boot.Locks$.apply0(Locks.scala:31)
at xsbt.boot.Locks$.apply(Locks.scala:28)
at xsbt.boot.Update.apply(Update.scala:100)
at xsbt.boot.Launch.update(Launch.scala:279)
at xsbt.boot.Launch.xsbt$boot$Launch$$retrieve$1(Launch.scala:149)
at xsbt.boot.Launch$$anonfun$3.apply(Launch.scala:157)
at scala.Option.getOrElse(Option.scala:120)
at xsbt.boot.Launch.xsbt$boot$Launch$$getAppProvider0(Launch.scala:157)
at xsbt.boot.Launch$$anon$2.call(Launch.scala:142)
at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:98)
at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:81)
at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:102)
at xsbt.boot.Using$.withResource(Using.scala:11)
at xsbt.boot.Using$.apply(Using.scala:10)
at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:62)
at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:52)
at xsbt.boot.Locks$.apply0(Locks.scala:31)
at xsbt.boot.Locks$.apply(Locks.scala:28)
at xsbt.boot.Launch.locked(Launch.scala:178)
at xsbt.boot.Launch.app(Launch.scala:93)
at xsbt.boot.Launch.app(Launch.scala:91)
at xsbt.boot.Launch$.run(Launch.scala:51)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:45)
at xsbt.boot.Launch$.launch(Launch.scala:65)
at xsbt.boot.Launch$.apply(Launch.scala:16)
at xsbt.boot.Boot$.runImpl(Boot.scala:31)
at xsbt.boot.Boot$.main(Boot.scala:20)
at xsbt.boot.Boot.main(Boot.scala)
Error during sbt execution: java.io.IOException: No locks available
我试过的sbt版本:0.11.3-2和0.13.0 我也尝试更改sbt启动目录以避免权限问题。
我知道我做错了。
答案 0 :(得分:3)
如果您的“user.home”指向未安装NFS的NFS目录,SBT将依赖您的jvm属性“user.home”作为工作目录,并且 SEEMS 获取锁定锁定服务,然后你会得到“无锁可用”错误。
我多次遇到过这个错误(另一种情况是maven尝试在$ HOME / .m2 / ...下获取一些锁)。您有两种选择:
sbt clean compile -Duser.home=/disk1/myhome
答案 1 :(得分:1)
默认情况下,sbt尝试在启动或执行依赖项解析时获取独占锁。这是为了避免缓存损坏,或删除另一个进程正在使用的JAR文件(这可能会导致一些非常奇怪的错误)。
此锁定通常与分布式文件系统不兼容。有时它甚至会在意外实现的本地文件系统上失败。检查您的FS以查看Java是否支持锁定它。
您应该可以通过以下方式禁用此锁定:
sbt -Dsbt.boot.lock=false
另外,如果您有自己的sbt.boot.properties
文件,则需要以下内容:
[boot]
lock: false
这将禁用启动器内部的锁定功能,从而禁用所有使用此功能的sbt项目的锁定。 AFAIK这意味着sbt中的所有内容,尽管某些插件可能直接使用JDK锁定API。
答案 2 :(得分:0)
我真的不知道什么是错的,但我怀疑你的问题可能与this one类似。您是否在NFS安装上使用您的项目和/或sbt和/或主目录的副本进行构建?您是否尝试完全从本地磁盘进行构建?