我正在尝试以"干净的方式"打包一个小应用程序(仍在学习Scala!).目标是拥有一个可执行的JAR文件.我做了以下事情:
Run Code Online (Sandbox Code Playgroud)scala -cp myjarfile.jar MyClass
要么
Run Code Online (Sandbox Code Playgroud)java -classpath path\to\scala-library.jar;myjarfile.jar MyClass
但不会合作
Run Code Online (Sandbox Code Playgroud)java -jar myjarfile.jar
因为然后无法找到scala/ScalaObject.并且在最后一个上添加类路径没有用,因为-jar选项将忽略-classpath选项.请注意,我已在系统CLASSPATH变量中添加了scala库,但在使用-jar时似乎也会忽略它.
经过数小时的谷歌搜索,我看不到创建一个小的jar文件,双击时将启动,并且不涉及痛苦的操作.我错过了什么?我猜应该有一些方法来定义scala库在系统级别的位置.您如何处理您希望编译并准备运行以提高效率的小型应用程序?
请注意,虽然我正在使用sbt,但我手头没有jar工具(我依赖的是JRE,而不是JDK).
谢谢!皮耶尔里克.
我对Scala很陌生,而且在Java中过于生疏,除了一个完整的新手之外别无其他.所以我正在采取简单的步骤来学习它.
在看演员时,我尝试了一些东西,但遇到了许多NoClassDefFound错误.最后,我决定拿一本书的例子并在它之上构建,而不是调试我的第一次尝试.惊喜:书中的例子没有按预期工作!
以下是O'Reilly的Scala编程示例:
import scala.actors.Actor
class Redford extends Actor {
def act() {
println("A lot of what acting is, is paying attention.")
}
}
val robert = new Redford
robert.start
Run Code Online (Sandbox Code Playgroud)
在执行时,它应该打印出Redford报价.但是,当我启动它时,没有任何反应,我回到命令行:
D:\prog\scala-2.8.1.final\pierric>scala testactors.scala
D:\prog\scala-2.8.1.final\pierric>
Run Code Online (Sandbox Code Playgroud)
另一个例子来自Seven Weeks的Seven Programming Languages.就像这样(我只是改变了懒惰的字符串):
import scala.actors._
import scala.actors.Actor._
case object Poke;
case object Feed;
class Kid() extends Actor {
def act() {
loop {
react {
case Poke => {
println("Ow")
println("Quit it")
}
case Feed => {
println("gurgle")
println("burp")
}
}
}
}
}
var …Run Code Online (Sandbox Code Playgroud)