5

spark プロジェクトをビルドするために、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 ブート ディレクトリを変更しようとしました。

私がそれを間違っているという考え。

4

3 に答える 3

4

SBT は作業ディレクトリとして jvm のプロパティ「user.home」に依存しており、SEEMSはそこでロックを取得します。「user.home」が NFS ロック サービスをインストールしていない NFS ディレクトリを指している場合、「使用できるロックがありません」というエラー。

私はこのエラーに数回遭遇しました (別のケースは、$HOME/.m2/... の下でいくつかのロックを取得しようとする maven です)。次の 2 つのオプションがあります。

  • NFS ロック サービスをインストールする
  • プロパティ -Duser.home=/path/in/local/disk を渡して、NFS でディレクトリを使用しないように sbt に指示します。例えば。
    • sbt clean compile -Duser.home=/disk1/myhome
于 2015-01-13T16:16:15.200 に答える
1

デフォルトでは、sbt はブート時または依存関係の解決時に排他ロックを取得しようとしました。これは、キャッシュの破損や、別のプロセスが使用している JAR ファイルの削除 (非常に奇妙なエラーが発生する可能性がある) を回避するためです。

通常、このロックは分散ファイル システムと互換性がありません。予期しない実装のローカル ファイルシステムで失敗することさえあります。FS をチェックして、Java がロックをサポートしているかどうかを確認してください。

次の方法でこのロックを無効にできるはずです。

sbt -Dsbt.boot.lock=false

さらに、独自のsbt.boot.propertiesファイルがある場合は、次のものが必要です。

[boot]
lock: false

これにより、ランチャー内のロック機能が無効になり、この機能を使用するすべての sbt プロジェクトのロックが無効になります。私の知る限り、これは sbt のすべてを意味しますが、一部のプラグインは JDK ロック API を直接使用している可能性があります。

于 2015-01-13T16:38:11.493 に答える
0

何が問題なのかよくわかりませんが、あなたの問題はこれに似ているのではないかと思います。プロジェクトおよび/または sbt のコピーおよび/または NFS マウント上のホーム ディレクトリを使用してビルドしていますか? ビルド全体をローカル ディスクから実行しようとしましたか?

于 2014-02-23T07:30:01.247 に答える