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 ファイルは、sbt が見つけられるように src/main/scala ディレクトリに配置する必要があります。また、シネッソが指摘したように、scala ランタイムが存在しないようです。通常、sbt は新しいプロジェクトを作成するときにこれらをダウンロードするだけです。fres プロジェクトで sbt 0.7.3 を使用して試してみたところ、次のように動作します。

$sbt
プロジェクトが存在しません。新しいプロジェクトを作成しますか? (y/N/s) y
お名前: お試し
組織: テスト
バージョン [1.0]:
Scala バージョン [2.7.7]:
sbt バージョン [0.7.3]:
Scala 2.7.7 を取得しています ...
:: 取得 :: org.scala-tools.sbt#boot-scala
    confs: [デフォルト]
    2 つのアーティファクトがコピーされ、0 が取得済み (9911kB/26ms)
org.scala-tools.sbt sbt_2.7.7 0.7.3 を取得しています ...
:: 取得 :: org.scala-tools.sbt#boot-app
    confs: [デフォルト]
    15 個のアーティファクトがコピーされ、0 個が取得済み (4023kB/25ms)
[成功] ディレクトリ構造の初期化に成功しました。
[情報] Scala 2.7.7 に対するビルド プロジェクト test 1.0
[情報] sbt 0.7.3 および Scala 2.7.7 で sbt.DefaultProject を使用する

>終了

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

> sbt
[情報] Scala 2.7.7 に対するビルド プロジェクト test 1.0
[情報] sbt 0.7.3 および Scala 2.7.7 で sbt.DefaultProject を使用する
> 走る
やあ!

> パッケージ
[情報]
[情報] == コンパイル ==
[info] ソース分析: 0 件の新規/変更、0 件の間接的な無効化、0 件の削除。
[情報] 主なソースをコンパイルしています...
[情報] コンパイルするものはありません。
[情報] 分析後: 2 つのクラス。
[情報] == コンパイル ==
[情報]
[情報] == パッケージ ==
[情報] == パッケージ ==
【成功】成功。

于 2010-05-22T03:54:57.537 に答える