2011-01-10 9 views
0

私はスカラーでapparatライブラリを使って何かをしようとしています。ライブラリは/ Applications/apparatにあります。コンパイルは正常に行われます。インポートは正常ですが、実行するとこのエラーが発生します。スカラクラスパスミックスアップjava.lang.NoClassDefFoundError

scalac -classpath /Applications/apparat/\* SimpleObject.scala 
scala -cp . SimpleObject hello.swf 

java.lang.NoClassDefFoundError: apparat/utils/TagContainer$ 

スクリプト:

import apparat.utils.TagContainer 


    object SimpleObject { 
     def main(args : Array[String]) : Unit = { 

     val tags = TagContainer.fromFile(args(0)) 

    } 
    } 

私はコンパイルするときや、それを実行しているとき、私はどちらか何かを見逃してかなり確信しています。私がコマンドラインインタプリタを使用すると、スクリプトは正常に動作し、何のエラーも出ません。たとえば、これを行うことができます。

scala -cp /Applications/apparat/\* 
Welcome to Scala version 2.8.0.RC3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_22). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> import apparat.utils.TagContainer 
import apparat.utils.TagContainer 

scala> val tag = TagContainer.fromFile("hello.swf") 
tag: apparat.utils.TagContainer = [email protected] 
+0

なぜ 'scala'を呼び出すときに'/Applications/apparat/\ * 'をクラスパスに追加していませんか? –

+0

私がscala -cp/Applications/apparat/\ * SimpleObject hello.swfを実行すると、SimpleOBjectが見つかりません。私はそれがそのディレクトリで実行したいスクリプトを探し始めると思います。 – Murgh

答えて

0
scala -classpath /Applications/apparat/\*:. SimpleObject hello.swf 

私はワイルドカードは、クラスパスで許可されていなかったと思ったのに。

+0

ワイルドカードはいくつかのケースで動作しますが、すべてのjarを指定する方が安全です。それは別の非常に迷惑なものなので、変数をエクスポートしました。 – Murgh

+0

私はJavaの新しいことだと思っています。 –

+0

実際、ワイルドカードはスクリプトとして実行したときにうまく動作しましたが、コンパイルされたプログラムとして実行したときはうまく動作しませんでした。たぶんちょうど偶然。 – Murgh

0

それを見てください。現在のディレクトリをコンパイル時に-cp(:。)に入れる必要があります。また、-cpを実行すると、同じクラスパスを指す必要があります。

+0

実際、これは私の誤植でした。コンパイル時に実行する必要はありません。 –

+0

コンパイル時にも必要ですが、それ以外の場合はインポート時にエラーが発生します。 – Murgh

関連する問題