您可以将scala脚本作为linux shell脚本运行:
#!/bin/sh
exec scala "$0" "$@"
!#
println("Hello")
Run Code Online (Sandbox Code Playgroud)
在一个这样的脚本中,我需要从一组jar中加载类(这些jar恰好与脚本位于同一目录中).如果这是我可以使用的REPL :jar
,但这在脚本模式下不可用.
我正在尝试设置-classpath
参数:
#!/bin/sh
exec scala -classpath '.:./*.jar' "$0" "$@"
!#
import javax.media.jai.{JAI, RenderedOp}
Run Code Online (Sandbox Code Playgroud)
但编译器只是找不到类:
error: object media is not a member of package javax
import javax.media.jai.{JAI, RenderedOp}
^
Run Code Online (Sandbox Code Playgroud)
我如何包括这些罐子?
vik*_*tnk 10
exec scala -classpath ./*.jar $0 $@
Run Code Online (Sandbox Code Playgroud)
将工作
Mar*_*ing 10
由于某种原因,glob(*.jar
)无法正常工作.通过手动放入所有库,我能够运行脚本:
#!/bin/sh
exec scala -cp lib/jai_codec.jar:lib/jai_core.jar:lib/mlibwrapper_jai.jar $0 $@
!#
import javax.media.jai.{JAI, RenderedOp}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么 glob不起作用.
请注意,在这种情况下,我没有.
在类路径中,因为脚本本身作为参数提供.在许多情况下,您需要包含它:
exec scala -cp .:lib/jai_codec.jar:lib/jai_core.jar:lib/mlibwrapper_jai.jar $0 $@
Run Code Online (Sandbox Code Playgroud)
基于这篇有用的帖子,我有一个脚本标题,可以拉入lib
文件夹中的每个jar ,即使脚本(或它所在的文件夹)是符号链接.
#!/bin/sh
L=`readlink -f $0`
L=`dirname $L`/lib
cp=`echo $L/*.jar|sed 's/ /:/g'`
/usr/bin/env scala -classpath $cp $0 $@
exit
!#
Run Code Online (Sandbox Code Playgroud)
$0
转换为其在磁盘上的实际位置,从而扩展符号链接./lib
cp
变量,所有的jar分隔开:
归档时间: |
|
查看次数: |
8636 次 |
最近记录: |