如何运行使用简单构建工具创建的包?
问题描述:
$ echo 'object Hi { def main(args: Array[String]) { println("Hi!") } }' > hw.scala
$ sbt
> warn
Set log level to warn
> run
Hi!
> package
$ java -jar target/scala_2.7.7/test_2.7.7-1.0.jar
Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
为什么我不能运行这个jar包这种方式?
答
您正试图在没有scala运行时的情况下运行它。无论是使用Scala的可执行文件:
scala -jar target/scala_2.7.7/test_2.7.7-1.0.jar
,或者斯卡拉jar添加到classpath
java -cp target/scala_2.7.7/test_2.7.7-1.0.jar:$PATH_TO_SCALA_JAR Hi
答
我不知道你正在使用的SBT的版本,或者你用什么项目设置,但通常你的hw.scala文件应该放在src/main/scala目录中以便找到它。另外,正如synesso所言,scala运行时似乎不存在。通常sbt只会在创建新项目时下载这些内容。 我只是试图在一个FRES项目中使用SBT 0.7.3,而这个作品:
$ sbt Project does not exist, create new project? (y/N/s) y Name: test Organization: test Version [1.0]: Scala version [2.7.7]: sbt version [0.7.3]: Getting Scala 2.7.7 ... :: retrieving :: org.scala-tools.sbt#boot-scala confs: [default] 2 artifacts copied, 0 already retrieved (9911kB/26ms) Getting org.scala-tools.sbt sbt_2.7.7 0.7.3 ... :: retrieving :: org.scala-tools.sbt#boot-app confs: [default] 15 artifacts copied, 0 already retrieved (4023kB/25ms) [success] Successfully initialized directory structure. [info] Building project test 1.0 against Scala 2.7.7 [info] using sbt.DefaultProject with sbt 0.7.3 and Scala 2.7.7 > exit $echo 'object Hi { def main(args: Array[String]) { println("Hi!") } }' > src/main/scala/hw.scala > sbt [info] Building project test 1.0 against Scala 2.7.7 [info] using sbt.DefaultProject with sbt 0.7.3 and Scala 2.7.7 > run Hi! > package [info] [info] == compile == [info] Source analysis: 0 new/modified, 0 indirectly invalidated, 0 removed. [info] Compiling main sources... [info] Nothing to compile. [info] Post-analysis: 2 classes. [info] == compile == [info] [info] == package == [info] == package == [success] Successful.
+0
我创建使用临时项目 - 年(年/月/日)。使用新的sbt。它自己下载了scala。 – 2010-05-22 09:50:54
我不能运行的第一个,我没有安装斯卡拉(SBT下载它,并利用内部)。第二个不起作用。 – 2010-05-22 10:01:31
java -cp project/boot/scala-2.7.7/lib/scala-library.jar :. -jar target/scala_2.7.7/test_2.7.7-1.0.jar您好 #不工作。 – 2010-05-22 10:03:02
您不能将-cp和-jar与java可执行文件混合在一起。将你的test_2.7.7-1.0.jar包含在classpath中。如果你在窗户上,分隔符是;不是: 因此,请尝试: java -cp project/boot/scala-2.7.7/lib/scala-library.jar:target/scala_2.7.7/test_2.7.7-1.0.jar您好 – Synesso 2010-05-22 11:34:46