No Programming, No Life

プログラミング関連の話題や雑記

Groovyのクラスパス(classpath)

Groovyスクリプトを実行する際に、既にあるクラスにクラスパスを通したい場合がある。Javaと同じように通せるかなと思ったら、バグがあったりするみたいで、ちょっと梃子摺るのでメモしておく。

とりあえず、本家よりクラスパス指定方法

* add things to your CLASSPATH environment variable
* pass -classpath (or -cp) into the command you used to create the shell or run the script
* It's also possible to create a ~/.groovy/lib directory and add whatever jars you need in there.

Groovy - Running

方法その1:環境変数CLASSPATHに書いておいてね

一つ目は環境変数CLASSPATHにクラスパスを通したいパスを書いていけ!ということだが、これを実際に試してみたところ、うまくいかなかった。残念。

方法その2:コマンドで指定する

続いて、二つ目は、シェルのコマンドで -classpath (もしくは -cp) で直接クラスパスを指定してねって方法だ。さっそくやってみたが、Groovyソースファイルじゃないからダメよみたいなエラーが出てうまくいかない…。


C:\gv>groovy -classpath .\classpathtest\ run_classpath_test.groovy
Caught: java.lang.IllegalArgumentException: C:\gv\classpathtest (C:\gv\classpathtest)
is a directory not a Groovy source file.

ちなみに、-classpathを-cpにしてもだめ。こっちはバグ(-cpがcだけになってしまうみたい?)があるみたい。


C:\gv>groovy -cp .\classpathtest\ run_classpath_test.groovy
error: no argument for:c
usage: groovy [options] [args]
options:
-p process files line by line and print result
(see also -n)
-D,--define define a system property




>> [#GROOVY-2628] Command line option for classpath (--cp/--classpath) is broken on Windows - jira.codehaus.org

groovysh, groovyConsoleだとなぜかうまくいく

groovysh, groovyConsoleを以下のようにして起動するとなぜかうまくいく。
※Test.classがclasspathtestというフォルダに置いてあるという設定。

以下はgroovyshの例


C:\gv>groovysh -classpath .\classpathtest\
Groovy Shell (1.5.6, JVM: 10.0-b19)
Type 'help' or '\h' for help.

                                                                                                        • -

groovy:000> Test.test()
===> クラスパスが通っています。
groovy:000>


以下はgroovyConsoleの例


C:\gv>groovyConsole -classpath .\classpathtest\


f:id:fumokmm:20080828005109p:image

方法その3:ホームディレクトリにじかに置く

心地よくうまくいったのは結局この3つ目だけ。
自分のホームディレクトリ(C:\Documents and Settings\{ユーザ名}\.groovy\lib)にクラスパスを通したいjarなんかを置いておくだけでよい。

結論

早くバグがなおるといいな。