※過去のブログ記事の移行
テーブルデータ入れ替えツールを配布しようとしたとき、groovy-allのjarを使おうとしてハマったネタ。
jarの場所
そもそもどこにあるのかわからなかった。。
てっきりlib配下にでもあるのかと思っていたら、そんなことはなく、embeddableフォルダ配下にあった。
※Windows8にデフォルトインストールだと以下
C:\Program Files (x86)\Groovy\Groovy-2.1.5\embeddable
groovy-all-2.1.5.jar
※同フォルダ配下にある「groovy-all-2.1.5-indy.jar」はinvokedynamicに対応したjarの模様。
invokedynamicってなんぞ?簡単に言うと効率化が上がったバイトコードみたい。
-jarだとCLASSPATH指定できない?!
alljarを使う場合の書き方は以下のようになるのですが、
java -jar lib\groovy-all-2.1.5.jar UpdateTable.groovy SOME_TABLE.csv
jarオプションの仕様でこの書き方をするとCLASSPATHが一切指定出来ません。
DBアクセスするので、CLASSPATHにJDBCのjarを通したかったのでこれだとまずくて、
色々考えましたが、普通にこんな感じのCLASSPATH指定でいけました。
java -cp .;lib\groovy-all-2.1.5.jar;lib\db2jcc4.jar groovy.ui.GroovyMain UpdateTable.groovy SOME_TABLE.csv
- libフォルダ配下に使いたいjarを置いたのなら、「-cp .;lib*」でもいいはず。
- groovy-all-2.1.5.jarのMainクラスを知るためにはjarを解凍して、META-INF配下のMAINFEST.MFの末尾を見ればよいです。"Main-class: groovy.ui.GroovyMain"と書いてます。
- Groovyスクリプトに渡したい引数は、スクリプト名の後ろにスペース区切りで記入すればOK。
これでGroovyスクリプトを配布できますね!