如何从不同的目录运行Scala编译的类

时间:2010-09-08 22:26:25

标签: scala batch-file

在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在哪里找到我想要运行的类?

2 个答案:

答案 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环境变量中。