由于 InvalidPath 异常,无法使用 'sbt console' 启动 Scala REPL

3

我正在使用 Windows 10 操作系统,并从 Scala-Lang 下载页面使用 .msi 安装程序安装了 sbt 1.4.5。现在,在命令提示符中键入 sbtsbt about 时,可以正常工作,但是当我键入 sbt console 时,就会出现以下错误信息:

C:\Users\anka2\Scala_Samples\Variables>sbt console
[warn] Neither build.sbt nor a 'project' directory in the current directory: "C:\Users\anka2\Scala_Samples\Variables"
c) continue
q) quit
?c
[warn] No sbt.version set in project/build.properties, base directory: C:\Users\anka2\Scala_Samples\Variables
[info] welcome to sbt 1.4.5 (Oracle Corporation Java 1.8.0_271)
[info] loading global plugins from C:\Users\anka2\.sbt\1.0\plugins
[info] set current project to variables (in build file:/C:/Users/anka2/Scala_Samples/Variables/)
[error] java.nio.file.InvalidPathException: Illegal char <"> at index 0: "C:\Windows\System32
[error]         at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
[error]         at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
[error]         at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
[error]         at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94)
[error]         at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255)
[error]         at java.io.File.toPath(File.java:2234)
[error]         at sbt.internal.inc.classpath.ClasspathUtil$.$anonfun$javaLibraryPaths$1(ClasspathUtilities.scala:62)
[error]         at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:285)
[error]         at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:36)
[error]         at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:33)
[error]         at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:38)
[error]         at scala.collection.TraversableLike.map(TraversableLike.scala:285)
[error]         at scala.collection.TraversableLike.map$(TraversableLike.scala:278)
[error]         at scala.collection.AbstractTraversable.map(Traversable.scala:108)
[error]         at sbt.internal.inc.classpath.ClasspathUtil$.javaLibraryPaths(ClasspathUtilities.scala:62)
[error]         at sbt.internal.inc.classpath.ClasspathUtil$$anon$2.<init>(ClasspathUtilities.scala:50)
[error]         at sbt.internal.inc.classpath.ClasspathUtil$.toLoader(ClasspathUtilities.scala:48)
[error]         at sbt.internal.inc.classpath.ClasspathUtil$.makeLoader(ClasspathUtilities.scala:115)
[error]         at sbt.internal.inc.classpath.ClasspathUtil$.makeLoader(ClasspathUtilities.scala:103)
[error]         at sbt.Defaults$.$anonfun$consoleTask$1(Defaults.scala:2043)
[error]         at sbt.Defaults$.$anonfun$consoleTask$1$adapted(Defaults.scala:2037)
[error]         at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error]         at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error]         at sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error]         at sbt.Execute.work(Execute.scala:291)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
[error] (Compile / console) java.nio.file.InvalidPathException: Illegal char <"> at index 0: "C:\Windows\System32
[error] Total time: 0 s, completed Jan 17, 2021 11:25:34 AM

我尝试通过运行sbt --verbose来识别格式错误,这是我得到的结果:

C:\Users\anka2>sbt --verbose
# Executing command line:
"C:\Program Files\Java\jdk1.8.0_271\bin\java.exe"
-Dfile.encoding=UTF-8
-Xms1024m
-Xmx1024m
-Xss4M
-XX:ReservedCodeCacheSize=128m
-cp
"C:\Program Files (x86)\sbt\\bin\sbt-launch.jar"
 xsbt.boot.Boot

[info] welcome to sbt 1.4.5 (Oracle Corporation Java 1.8.0_271)
[info] loading global plugins from C:\Users\anka2\.sbt\1.0\plugins
[info] loading project definition from C:\Users\anka2\project
[info] set current project to anka2 (in build file:/C:/Users/anka2/)
[info] sbt server started at local:sbt-server-ff142d10856e0dc0f951
[info] started sbt server

但是,在我输入console后,我立即收到相同的InvalidPath异常消息。

这可能很基础,但我绝对无法理解我做错了什么或如何修复它。


我知道这不是一个答案,但你考虑过使用 WSL 吗?我个人无法想象在本机 Windows 上开发。 - Luis Miguel Mejía Suárez
InvalidPathException 表示你的类路径中有格式不正确的内容。尝试运行 sbt --verbose console 命令,查看 sbt 正在执行的确切 Java 命令,检查类路径中是否有任何错误,并确定这些条目的来源并进行更正。 - Charlie Flowers
2
这个回答解决了你的问题吗?在cmd中运行scala会让我看起来好像缺少'build.sbt'。 - Tomer Shetah
@TomerShetah,我尝试了,仍然出现相同的错误。也尝试了你建议的build.sbt方法,但错误仍然存在。 - PixieDev
我不确定这一点,但我认为仅仅启动Scala REPL并不需要构建文件。我只想能够在命令提示符中启动Scala REPL。 - PixieDev
让我们在聊天中继续这个讨论 - PixieDev
2个回答

3
由于您在不是 sbt 项目的文件夹中运行此命令,因此出现了失败的情况。正如您在错误信息中所看到的:
Neither build.sbt nor a 'project' directory in the current directory: "C:\Users\anka2\Scala_Samples\Variables"

当您想要运行它时,请将其添加到目录中:

  1. project\build.properties file with the content:

    sbt.version = 1.4.5
    
  2. build.sbt file with the content:

    name := "test213"
    version := "0.1"
    scalaVersion := "2.13.4"
    

然后尝试重新运行这个命令。


2

问题是SBT缺少几个文件。

修复方法:使用cmd

  1. 进入一个空文件夹。
  2. C:\Users\USER\scala_sample_learning> sbt new scala/hello-world.g8
  3. 如果第2步成功实现,cmd会提示您输入名称,请输入hello-world
  4. 现在可以使用sbt console

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接