こちらの記事で、Groovy をインストールしていない環境で Groovy スクリプトを実行する方法が書かれてました。 この方法では、スクリプトの実行に必要な Groovy と Ivy*1 の Jar ファイル自体は実行者に用意してもらう必要がありました。
最近、Clojure の勉強にと思って Leiningen というツールをイジってたんですが*2、このツールでは Clojure の Jar はもちろん、Leiningen の Jar すらもツールによってダウンロードしちゃおう!ってやつで、ユーザーがダウンロードする必要があるのはシェル・スクリプト(*nix、Mac 上)もしくはバッチ・ファイル(Windows)だけ、という手軽極まりない(?)ユーザビリティとなっております。 んで、これをちょっと Groovy スクリプトの実行に応用してみよう!と試行錯誤してみました。 以下、Windows の話です。 しかも、たぶん win32 系のみ。
参考
準備
ここで行う方法と参考記事「作成したGroovyスクリプトをGroovy未インストール環境で使ってもらう」で行っている方法との違いは、必要な Jar ファイル(groovy-all-x.x.x.jar, ivy-x.x.x.jar)をバッチファイルからダウンロードしてやろう!ってところですが、そのためには OS ネイティブなツールを使わないといけないのが難点*3。 この辺りが WORA を信条とする Java プログラマには取っつきにくいところ。 まぁ我慢。
Leiningen では Leiningen の Jar ファイルをダウンロードするのに wget というツール(コマンド)を使ってますが、Windows ではデフォルトで使用できないので、まずこのツールをインストールしなければいけません。 それができれば、後はバッチファイルを実行するだけです。
wget のインストール
wget は以下のサイト
から exe ファイルがダウンロード出来ます。 直で exe ファイルが置かれてるのもちょっとコワイですがw 使用方法やライセンスをまとめた zip ファイルは
から取得できます。 この zip ファイルを展開して bin フォルダにある wget.exe を使っても構いません。
ともかく、この wget.exe ファイルを PATH 上、もしくは実行したい Groovy スクリプトと同じフォルダ上に配置します。 wget のインストールはこれだけ*4。
バッチファイルの配備
次はバッチファイルの配備。 といっても、以下のファイル
- qroovy.bat (←「groovy.bat」ではなく「qroovy.bat」ね。)
をダウンロードして、wget.exe と同様に PATH 上もしくは実行したい Groovy スクリプトと同じフォルダ上に置きます。 ちなみにバッチファイルの内容はこんなの:
@echo off :: Configurable variables if "%GROOVY_VERSION%" == "" set GROOVY_VERSION=2.0.1 if "%IVY_VERSION%" == "" set IVY_VERSION=2.2.0 if "%QROOVY_REPO%" == "" set QROOVY_REPO=%USERPROFILE%\.qroovy if "%JAVA_CMD%" == "" set JAVA_CMD="java" if "%JVM_OPTS%" == "" set JVM_OPTS=%JAVA_OPTS% setLocal EnableExtensions EnableDelayedExpansion :: Fixed variables set GROOVY_JAR=!QROOVY_REPO!\groovy-all-!GROOVY_VERSION!.jar set GROOVY_JAR_URL=http://repo1.maven.org/maven2/org/codehaus/groovy/groovy-all/%GROOVY_VERSION%/groovy-all-%GROOVY_VERSION%.jar set IVY_JAR=!QROOVY_REPO!\ivy-!IVY_VERSION!.jar set IVY_JAR_URL=http://repo1.maven.org/maven2/org/apache/ivy/ivy/%IVY_VERSION%/ivy-%IVY_VERSION%.jar set ORIGINAL_PWD=%CD% :: If ORIGINAL_PWD ends with a backslash (such as C:\), :: we need to escape it with a second backslash. if "%ORIGINAL_PWD:~-1%x" == "\x" set "ORIGINAL_PWD=%ORIGINAL_PWD%\" :: Download jar files if not exists. for %%f in ("%GROOVY_JAR%") do set QROOVY_REPO="%%~dpf" if not exist %QROOVY_REPO% mkdir %QROOVY_REPO% set HTTP_CLIENT=wget --no-check-certificate -O wget>nul 2>&1 if ERRORLEVEL 9009 ( curl>nul 2>&1 if ERRORLEVEL 9009 goto NO_HTTP_CLIENT set HTTP_CLIENT=curl --insecure -f -L -o ) if not exist "%GROOVY_JAR%" ( echo Downloading Groovy now... %HTTP_CLIENT% "%GROOVY_JAR%" %GROOVY_JAR_URL% if ERRORLEVEL 1 ( del %GROOVY_JAR%>nul 2>&1 echo. echo Failed to download %GROOVY_JAR_URL% echo. goto EOF ) ) if not exist "%IVY_JAR%" ( echo Downloading ivy now... %HTTP_CLIENT% "%IVY_JAR%" %IVY_JAR_URL% if ERRORLEVEL 1 ( del %IVY_JAR%>nul 2>&1 echo. echo Failed to download %IVY_JAR_URL% echo. goto EOF ) ) goto RUN :NO_HTTP_CLIENT echo. echo ERROR: Wget/Curl not found. Make sure at least either of Wget and Curl is echo installed and is in PATH. You can get them from URLs below: echo. echo Wget: "http://users.ugent.be/~bpuype/wget/" echo Curl: "http://curl.haxx.se/dlwiz/?type=bin&os=Win32&flav=-&ver=2000/XP" echo. goto EOF :RUN if not "%DEBUG%" == "" echo CLASSPATH=!CLASSPATH! :: ################################################## setLocal DisableDelayedExpansion %JAVA_CMD% %JVM_OPTS% -cp "%GROOVY_JAR%;%IVY_JAR%" groovy.ui.GroovyMain %* :EOF
wget コマンドは --no-check-certificate オプションを付けて実行しているので、セキュアじゃございません。 実行は自己責任で。
準備完了?
以下の2つのファイル
- wget.exe
- qroovy.bat
が PATH 上もしくは Groovy スクリプトと同じフォルダ上に配置されてますかね? それなら準備完了。
スクリプトの実行
さて、ではスクリプトの実行。 hello.groovy という Groovy スクリプトを実行したいなら
qroovy hello.groovy
というコマンドを実行します(拡張子 .groovy は省略可)。 コマンドは「groovy」ではなく「qroovy」。 設定がキチンとできていれば、groovy-all-2.0.1.jar, ivy-2.2.0.jar がダウンロードされて*5 Groovy スクリプトが実行されるハズです。 ちなみに、Leiningen では、Leiningen 自体をインストールするために最初「lein self-install」といったコマンドを実行する必要がありましたが、上記のバッチファイルでは必要ありません。
もちろん参考元の test.gr も動きます:
set JAVA_OPTS=-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8 qroovy test.gr
つまるところ、@Grab で Java ライブラリをダウンロードできますヨってことです。
設定できる変数
上記のバッチファイルには、いくつか設定できる変数があります:
変数名 | 説明 | デフォルト値 |
---|---|---|
GROOVY_VERSION | 使用する Groovy のバージョン | 2.0.1 |
IVY_VERSION | 使用する Ivy のバージョン | 2.2.0 |
QROOVY_REPO | ダウンロードした Jar ファイルの格納場所 | %USERPROFILE%\.qroovy*6 |
JAVA_CMD | 使用する Java 実行コマンド | java |
JVM_OPT(JAVA_OPT) | Java 実行コマンドに渡すパラメータ |
例えば、デフォルトでは使用される Groovy のバージョンは 2.0.1 ですが、別バージョンの Groovy を使いたいときにはコマンド・プロンプト上で
set GROOVY_VERSION=1.8.7 qroovy hello.groovy
のようにすれば、groovy-all-1.8.7.jar がダウンロードされて、そのバージョンの Groovy で実行できます。
今後・・・
やっぱりマジメにやるには Cygwin + シェル・スクリプトをやった方がいいのかな?
追記
こちらで紹介されている GVM (Groovy enVironment Manager) の方がいいんじゃね?ということで。
- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (152件) を見る