Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;错误:can';找不到主类scala.tools.nsc.MainGenericRunner“;在windows中运行scala时_Windows_Scala_Batch File - Fatal编程技术网

&引用;错误:can';找不到主类scala.tools.nsc.MainGenericRunner“;在windows中运行scala时

&引用;错误:can';找不到主类scala.tools.nsc.MainGenericRunner“;在windows中运行scala时,windows,scala,batch-file,Windows,Scala,Batch File,在下载scala 2.10.2 for windows并运行scala后,我遇到以下错误: ”错误: 找不到或无法加载主类 scala.tools.nsc.MainGenericRunner“ 这意味着“错误:无法找到或加载主类scala.tools.nsc.MainGenericRunner”。所以我检查了scala.bat的原因,发现了这样的函数: :set_home set _BIN_DIR= for %%i in (%~sf0) do set _BIN_DIR=%_BIN_DIR

在下载scala 2.10.2 for windows并运行scala后,我遇到以下错误:

”错误: 找不到或无法加载主类 scala.tools.nsc.MainGenericRunner“

这意味着“错误:无法找到或加载主类scala.tools.nsc.MainGenericRunner”。所以我检查了
scala.bat
的原因,发现了这样的函数:

:set_home
  set _BIN_DIR=
  for %%i in (%~sf0) do set _BIN_DIR=%_BIN_DIR%%%~dpsi
  echo in set_home: %_BIN_DIR%
  set _SCALA_HOME=%_BIN_DIR%..
goto :eof
此函数完成后,\u SCALA\u HOME变为
D:\program files\SCALA\files\SCALA\bin\..
,这显然是错误的。无论如何,在将_SCALA_HOME设置为正确路径后,错误得到修复然而,有人知道
%~sf0
%~dpsi
是什么意思吗?这个函数真正想做什么? 谢谢大家!


谢谢你@gourlaysama

我终于找到了真正的原因:执行以下代码,您可以看到结果是:

  for %%i in (%~sf0) do (
    echo "%%"i is: %%i
    echo sf0 is : %%~dpsi
    set _BIN_DIR=%_BIN_DIR%%%~dpsi
    )
输出:

"%"i is: D:\program
sf0 is : D:\
"%"i is: files\scala\bin\scala.bat
sf0 is : D:\program files\scala\bin\files\scala\bin\

因此,故障是由于
程序
文件
之间的额外空间造成的

这些奇怪的变量被称为。它们允许您将变量解释为文件/目录的路径,并直接从该路径解析内容

例如,如果
%1
是指向文件
dir123456\file.txt
的路径

  • %~f1
    是指向
    file.txt
    的完全限定路径
  • %~p1
    是包含目录的路径
    dir123456
  • %~s1
    是短名称格式的路径
    dir123~1\file.txt
  • 还有很多其他的
另外,
%0
始终设置为当前运行脚本的路径。因此:

  • %~fs0
    是指向当前脚本的完全限定路径,采用短名称格式
  • %%~dpsi
    是将
    变量
    %%i
    手动扩展为驱动器号(
    d
    选项),然后是包含文件夹的路径(
    p
    选项),格式较短(
    s
    选项)

现在,这个看起来很奇怪的代码块是一个解决方法,
%~dps0
命令不会给出当前脚本文件夹的路径(短格式),尽管它应该这样做。这已在XP SP2中修复


它似乎在手动重建scala
bin
目录的完全限定路径,从完全限定路径重建到
scala.bat
,然后只获取该目录的父目录,哪个应该是有效的
\u SCALA\u HOME

在Windows 10格式化的新卷中安装SCALA后,我遇到了相同的错误

解决方法是将Scala安装到没有空格的路径上。e、 g.
D:\scala

scala.bat
使用8.3文件名设置
\u scala\u HOME
,但是可以通过选项禁用NTFS卷上的8.3文件名生成(现在似乎是默认设置)

要检查是否启用了8.3文件名生成,请运行
dir/x
,查看长文件名旁边是否显示短文件名/文件夹名

C:\>dir /x
2016/04/19  08:26    <DIR>          PROGRA~1     Program Files
D:\>dir /x
2016/04/19  14:38    <DIR>                       Program Files

如果您试图创建一个不允许在目录中包含空格的环境变量,则需要使用Window的缩短路径名

使用“C:\Program Files\scala…”而不是“C:\Program Files\scala…”

使用“C:\Program Files(x86)\scala…”代替“C:\Program Files(x86)\scala…”

否则,

这家伙找到了解决办法:

解决方案:

要对批处理文件进行他所说的更改,请下载记事本++

然后右键单击NotePad++并选择“以管理员身份运行”或“以PowerBroker管理员身份运行”

在记事本中打开新文件++

导航到scala/bin/scala.bat文件目录并选择scala.bat

将代码更改为上面链接所述的内容。因此,最终结果应该是:

对scala/bin文件夹中的所有.bat文件进行更改:add_cpath和:set_home


现在打开命令提示符并键入“scala-version”或“scala”

另外,您是否使用了MSI或ZIP安装程序?你从哪里提取的?ZIP文件不包含
文件
子目录,而是直接包含
bin
和其他目录。我尝试了MSI和ZIP,但两者都不存在
文件
目录感谢编辑,现在更清晰了。这可能是cmd.exe下带有~s(有几个从未修复过…)的错误。你正在使用哪个版本的Windows?我也有同样的错误。我只需要把SCALA_HOME换成正确的。对我来说,这是“C:\Program Files\scala”而不是“C:\Program Files\scala\bin”@gourlaysama很抱歉回复晚了,我使用的是win7 Pro SP1space,这是程序文件的问题:|
fsutil 8dot3name query D: