ScalaとSpecs事始め

最近Scalaを始めた。とりあえず鉛筆本を読んだ。O'Reillyの獏本も、iPhone/iPod用電子書籍版を読書中。
ちょっと何か書いてみようか、まずはBDD*1のコードを書いてみようと、Specsのjarをダウンロードしてきた。
SpecsのQuickStartのページを見ながら、helloWorld.scalaを作成した後、

% scalac -cp specs-1.6.1.jar helloWorld.scala
% scala -cp specs-1.6.1.jar helloWorld
no such file: helloWorld

…QuickStart通りだが動かない。まぁ記述がおかしいからさもありなん。パスを追加して再実行。

% scala -cp specs-1.6.1.jar:. helloWorld
java.lang.NoClassDefFoundError: org/specs/util/Tree$class
	at org.specs.specification.BaseSpecification.(BaseSpecification.scala:55)
	at org.specs.Specification.(Specification.scala:43)
	at helloWorld$.(helloWorld.scala:3)
	at helloWorld$.(helloWorld.scala)
	at helloWorld.main(helloWorld.scala)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at scala.tools.nsc.ObjectRunner$$anonfun$run$1.apply(ObjectRunner.scala:75)
	at scala.tools.nsc.ObjectRunner$.withContextClassLoader(ObjectRunner.scala:49)
	at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:74)
	at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:154)
	at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
Caused by: java.lang.ClassNotFoundException: org.specs.util.Tree$class
	at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:254)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:399)
	... 14 more
Caused by: java.io.IOException: unexpected EOF
	at sun.misc.Resource.getBytes(Resource.java:103)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:256)
	at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
	... 19 more

え、動かない!? しかもScala触ってんのにJavaのエラーとか、剥き出しすぎw


結論としては、specsのソースを落としてきて、ビルドしたjarならばQuickStart通り動いた。

% scala -cp lib/specs-1.6.1_BUILD.jar:. helloWorld

Specification "helloWorld"
  
  + 'hello world' has 11 characters
  + 'hello world' matches 'h.* w.*'

Total for specification "helloWorld":
Finished in 0 second, 63 ms
2 examples, 2 expectations, 0 failure, 0 error

ようやく先に進める。それにしても配布されているjarと何が違うんだろう。

Programming Scala: Tackle Multicore Complexity on the JVM (Pragmatic Programmers)

Programming Scala: Tackle Multicore Complexity on the JVM (Pragmatic Programmers)

Programming Scala

Programming Scala