我已经在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源代码,发现下面的方法会打印错误消息-在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
方法,它返回false。因此new UnixDomainServerSocket(name)
部分正在运行。而且它无法以某种方式创建Unix域服务器套接字。这就是我发现的全部。有没有办法来解决这个问题?还是这是一个错误?
答案 0 :(得分:0)
将项目文件移动到wsl2中的目录后,问题解决了。我的项目文件以前在Windows目录中。