如果我在命令行中运行以下脚本(保存为jarAccessTest.sh,这是一个可执行文件),则没有任何反应:
#!/bin/sh
# exec scala -classpath "/usr/local/google/home/vvasuki/sanskritnlpjava/target/sanskritnlp-1.0-SNAPSHOT.jar " "$0" "$@"
exec scala "$0" "$@"
!#
# import sanskritnlp.transliteration._;
print "hello"
我看不到输出。没有。命令提示符也不会返回。
这里发生了什么?我必须输入Ctrl + C才能停止发生的任何事情。
编辑:在ubuntu 14.04中使用scala 2.9:http://i.imgur.com/VMYKnUX.png
答案 0 :(得分:3)
您预先打包的Scala版本是很久以前的一个星系,远在很远的地方。
您最好从网站上下载最新的2.11.6。
当scala
运行器运行脚本时,它会启动编译服务器进程。如果这个过程被剔除,你可能不得不将其杀死或运行fsc -shutdown
以便很好地离开它。
您可以尝试在脚本中添加-nc
选项以消除该因素,即scala -nc
表示没有编译守护程序。
最后,如果你只是测试你的库,那么运行scala -cp my.jar
并从REPL进行实验会更常见。或者如果您正在使用SBT,请从那里启动控制台。
匿名建议添加:"他们认真地让你在这里输入任何东西"
我将从另一个答案中附加建议来运行fsc -verbose
。请注意,他们威胁要停止支持fsc
,因为它有问题,当它们发生时令人抓狂。出于这个原因,我更喜欢scala -nc
进行简短测试,scalac -d script.jar script.scala
,其中脚本是App
。
答案 1 :(得分:1)
原始计算机上的问题从未真正解释过,但有人指出使用'-nc'标志有效。
原始问题可能与编译守护程序打开端口的能力有关。从fsc的手册页:
第一次执行时,守护程序会自动启动。 在后续运行中,可以重用相同的守护程序,从而加快编译速度。该工具在重复时特别有效 用相同的类路径编译,因为 编译守护程序可以重用编译器实例。
检查这是否是问题的一种方法是使用verbose
标志自行运行fsc。例如,使用
的println( “你好”)
在其中,然后运行
fsc -verbose hello.scala
如果这表明编译服务器无法连接,则表明您的问题已解决。在这种情况下尝试的第一件事是检查您的主机文件是否是犹太教。
(我有类似的问题,这就是我发现的)。
答案 2 :(得分:0)
您需要对代码进行一些更改,主要是在#line上,而不是scala中的注释。
#!/bin/sh
# exec scala -classpath "/usr/local/google/home/vvasuki/sanskritnlpjava/target/sanskritnlp-1.0- SNAPSHOT.jar " "$0" "$@"
exec scala "$0" "$@"
!#
// import sanskritnlp.transliteration._;
print ("hello\n")