"sbt server is already booting." 从 wsl2 启动 sbt 时出错 ubuntu

"sbt server is already booting." error when launching sbt from wsl2 ubuntu

我在 wsl2 ubuntu 设置中使用 sdkman 安装了 sbt。目前安装了 sbt 1.4.2。当我尝试从它给出的终端启动它时 sbt server is already booting. Create a new server? y/n (default y) 如果我选择 n,什么也不会发生。如果我选择 y,那么 sbt 就会启动。我想要做的是能够在没有该错误消息的情况下启动 sbt。因为这种行为会破坏 visual studio 代码上的金属。

我查看了sbt源码,发现下面的方法打印了错误信息- in sbt/main/src/main/scala/sbt/Main.scala

private def getSocketOrExit(
      configuration: xsbti.AppConfiguration
  ): (Option[BootServerSocket], Option[Exit]) =
    try (Some(new BootServerSocket(configuration)) -> None)
    catch {
      case _: ServerAlreadyBootingException
          if System.console != null && !ITerminal.startedByRemoteClient =>
        println("sbt server is already booting. Create a new server? y/n (default y)")
        val exit = ITerminal.get.withRawInput(System.in.read) match {
          case 110 => Some(Exit(1))
          case _   => None
        }
        (None, exit)
      case _: ServerAlreadyBootingException =>
        if (SysProp.forceServerStart) (None, None)
        else (None, Some(Exit(2)))
    }
}

因此,调用 new BootServerSocket(configuration) 会引发异常。异常源是下面来自 BootServerSocket.java;

的方法
static ServerSocket newSocket(final String sock) throws ServerAlreadyBootingException {
    ServerSocket socket = null;
    String name = socketName(sock);
    try {
      if (!isWindows) Files.deleteIfExists(Paths.get(sock));
      socket =
          isWindows
              ? new Win32NamedPipeServerSocket(name, false, Win32SecurityLevel.OWNER_DACL)
              : new UnixDomainServerSocket(name);
      return socket;
    } catch (final IOException e) {
      throw new ServerAlreadyBootingException();
    }
  }

我检查了 isWindows 方法,它 returns 错误。所以 new UnixDomainServerSocket(name) 部分是 运行。而且它无法以某种方式创建 unix 域服务器套接字。这就是我发现的全部。有没有办法来解决这个问题?或者这是一个错误?

将我的项目文件移动到 wsl2 中的一个目录后,问题就解决了。我的项目文件之前在 Windows 目录中。