在Windows下,我可以使用批处理脚本从其他目录运行Scala脚本,如:
Hello.bat:
@scala "%~dp0Hello.scala" %*
(%~dp0将被转换为批处理文件所在的路径)
所以我可以这样称呼它:
c:\somedir>path\to\scala\script\Hello
Hello World!
c:\somedir>path\to\scala\script\Hello Moon
Hello Moon!
或者,如果脚本所在的目录已经在路径中,我可以使用:
c:\somedir>Hello
Hello World!
c:\somedir>Hello Moon
Hello Moon!
我不能对编译的类做同样的事情:
@scala "%~dp0Hello.class" %*
无效,
@scala -howtorun:object "%~dp0Hello.class" %*
也不会工作,以及
@scala -howtorun:object "%~dp0Hello" %*
这一个:
@scala -howtorun:object "Hello" %*
仅当我在同一目录时才有效,与:
相同@scala Hello %*
和
@cd %~dp0
@scala Hello %*
可以工作,但它会在脚本目录中退出,而不是在我调用它时的位置!
如何告诉scala在哪里找到我想要运行的类?
答案 0 :(得分:2)
(如果我误解了你的问题,请告诉我,因为我怀疑你已经知道了这一点......)
要执行的类必须位于类路径上。简单地说,你可以:
set CLASSPATH=/path/to/where/your/base/package/is;%CLASSPATH%
或者您可以将其明确地放在scala调用中
scala -classpath /path/to/where/your/base/package/is;%CLASSPATH%
答案 1 :(得分:0)
仅出于文档目的:
感谢Synesso的回答,我能够用这个来实现它:
@echo off
set CLASSPATH_tmp=%CLASSPATH%
set CLASSPATH=%~dp0;%CLASSPATH%
call scala Hello %*
set CLASSPATH=%CLASSPATH_tmp%
set CLASSPATH_tmp=
scala(在Windows下)不接受-cp修饰符,因此该bat文件暂时将应用程序目录添加到CLASSPATH环境变量中。