我有一个包含Scala类/对象和脚本的Scala项目。我试图从命令行运行脚本(使用类/对象执行各种操作)。我希望这样做的方法是创建一个shell,它将作为参数传递脚本的名称,以及脚本本身所采用的参数。
我的文件夹结构如下:
runner.sh -> script I am trying to implement to run the Scala scripts
bin/ -> script I am trying to implement to run the Scala scripts
lib/ -> -> rest of scala project, packed as multiple jars
我目前正在shell脚本中创建一个变量LIB_CLASSPATH
,其中包含lib/
文件夹的内容,我正在尝试按如下方式运行我的脚本:
java -cp $LIB_CLASSPATH ./bin/<name_of_script.scala> <parameters of the script>
我总是得到同样的错误:
Could not find or load main class: ..lib/<name of jar>
-- <name of jar> is actually the first jar in the lib/ folder
我可以使用一些指导:)
答案 0 :(得分:1)
您可以使用Ammonite
(由@lihaoyi撰写)。
它是更好的Scala REPL,Shell,OPs库和 Script runner 的组合。 请参阅此处的文档 - http://www.lihaoyi.com/Ammonite/
10分钟的谈话,展示如何更好地编写脚本和shell - https://www.youtube.com/watch?v=wk2-ZsQU358
我认为这也是一个很好的起点。我的谈话是:)
答案 1 :(得分:0)
我建议使用sbt native packager。参见:
https://github.com/sbt/sbt-native-packager
您将此行添加到build.sbt:
mainClass in Compile := Some("org.shapelogic.sc.javafx.ViewGui")
定义一个主类:
sbt stage
运行:
target/universal/stage/bin/shapelogic
它创建位于以下位置的启动脚本:
target/universal/stage/bin/shapelogic -- -i image/440px-Lenna.png
以下是我如何使用该脚本的示例:
target/universal/stage/bin/shapelogic -main "org.shapelogic.sc.script.Threshold" -- i image/440px-Lenna.png
如果你想运行另一个课程,你可以这样做:
function myfunc(){
$.ajax({
url:"comments.php",
data:$("input").val(),
method:'post',
success:function(response){
},
error:function(error,message){
}
});
}
<form action="javascript:myfunc()"......>
答案 2 :(得分:0)
这是一个能够做你想做的事情的脚本。它基于我使用的脚本,但为了清晰起见而被删除:
#!/bin/bash
# copies of or symlinks to all required jar files
# must be in one of the directories referenced by CP
if [ $# -eq 0 ]; then
echo "usage: ${0##*} <scala-script-path>" 1>&2
exit 1
fi
REQUIRED_JAR_DIRECTORIES=(
"/usr/local/olib/*"
"/usr/local/jlib/*"
)
CP=$(echo "${REQUIRED_JAR_DIRECTORIES[@]}" | tr ' ' ':')
case `uname` in
CYGWIN*)
CP=`cygpath -p -w "$CP"`
;;
esac
scala -deprecation -feature -classpath "$CP" "$@"
使用此脚本的最简单方法是将其放在PATH中,然后将以下hash-bang行添加到scala脚本的顶部。假设您调用此脚本&#39; scalaRunner&#39;,这里是一个独立的工作scala脚本:
#!/usr/bin/env scalaRunner
println("Hello World!")
这是一个稍微复杂一点的人:
#!/usr/bin/env scalaRunner
if( args.isEmpty ){
printf("usage: <arg1> [<arg2> ..]\n")
sys.exit(1)
}
for( (arg,i) <- args.zipWithIndex ){
printf("arg %d: %s\n",i,arg)
}
如果您导入任何东西,只需确保所有必需的罐子都在REQUIRED_JAR_DIRECTORIES中。
实际上,您可能需要比此脚本更灵活的内容,尤其是在指定所需的jar所在位置时。