5

我跑:

$ 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包?

4

2 回答 2

4

您正在尝试在没有 scala 运行时的情况下运行它。要么使用 scala 可执行文件:

scala -jar target/scala_2.7.7/test_2.7.7-1.0.jar 

或者,将 scala jar 添加到类路径

java -cp target/scala_2.7.7/test_2.7.7-1.0.jar:$PATH_TO_SCALA_JAR Hi
于 2010-05-22T01:28:22.097 回答
0

我不知道你正在使用哪个版本的 sbt,或者你使用了什么项目设置,但通常你的 hw.scala 文件应该放在 src/main/scala 目录中,以便 sbt 找到它。此外,正如 synesso 所说,scala 运行时似乎不存在。通常 sbt 在创建新项目时只会下载这些。我刚刚在一个 fres 项目中使用 sbt 0.7.3 进行了尝试,这很有效:

$ sbt
项目不存在,创建新项目?(y/N/s) 是
名称:测试
组织:测试
版本 [1.0]:
斯卡拉版本[2.7.7]:
sbt 版本 [0.7.3]:
获取 Scala 2.7.7 ...
:: 检索 :: org.scala-tools.sbt#boot-scala
    配置文件:[默认]
    复制了 2 个工件,已检索到 0 个 (9911kB/26ms)
获取 org.scala-tools.sbt sbt_2.7.7 0.7.3 ...
:: 检索 :: org.scala-tools.sbt#boot-app
    配置文件:[默认]
    已复制 15 个工件,已检索 0 个 (4023kB/25ms)
[成功] 成功初始化目录结构。
[信息] 针对 Scala 2.7.7 构建项目测试 1.0
[信息] 使用 sbt.DefaultProject 和 sbt 0.7.3 和 Scala 2.7.7

> 退出

$echo 'object Hi { def main(args: Array[String]) { println("Hi!") } }' > src/main/scala/hw.scala

> sbt
[信息] 针对 Scala 2.7.7 构建项目测试 1.0
[信息] 使用 sbt.DefaultProject 和 sbt 0.7.3 和 Scala 2.7.7
> 运行
你好!

> 包装
[信息]
[信息] == 编译 ==
[信息] 来源分析:0 新/修改,0 间接无效,0 删除。
[信息] 编译主要来源...
[信息] 没有什么可编译的。
[信息] 后分析:2 节课。
[信息] == 编译 ==
[信息]
[信息] == 包 ==
[信息] == 包 ==
[成功] 成功。

于 2010-05-22T03:54:57.537 回答