Groovyのクラスパス(classpath)
Groovyスクリプトを実行する際に、既にあるクラスにクラスパスを通したい場合がある。Javaと同じように通せるかなと思ったら、バグがあったりするみたいで、ちょっと梃子摺るのでメモしておく。
とりあえず、本家よりクラスパス指定方法
* add things to your CLASSPATH environment variable
Groovy - Running
* 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.
方法その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,--definedefine 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\
方法その3:ホームディレクトリにじかに置く
心地よくうまくいったのは結局この3つ目だけ。
自分のホームディレクトリ(C:\Documents and Settings\{ユーザ名}\.groovy\lib)にクラスパスを通したいjarなんかを置いておくだけでよい。
結論
早くバグがなおるといいな。