Groovyスクリプトから、別のGroovyスクリプトを呼び出す方法

2019-01-23Groovy

2ちゃんねる や、 他のGroovyに関するブログ でも、
別のスクリプトファイルをimportするにはどうしたらよいのか? という疑問が多いようです。

手段その1 : classファイル化して読み込む方法

簡単に思いつく方法として以下の流れでimportする方法があります。

  1. Groovyファイルをgroovycコマンドでコンパイルする
  2. コンパイルして出来たclassファイルをimportする

手段その2 : Groovyスクリプトファイルをそのままimportする方法

では、コンパイルせずにGroovyスクリプトのクラスを利用できないか?

いろいろ試した結果、非常に簡単なことが分かりました。
例を挙げます。

Main.groovy ファイルから Printer.groovy ファイル内のクラスを利用するケースを想定します。

Printer.groovy

class Printer {
    def print() {
        println "出力しました"
    }
}

Main.groovy

def printer = new Printer()
printer.print()

問題は実行時のオプション。

# ファイルが有るかを確認
$ ls *.groovy
Main.groovy Printer.groovy

# 実行!
$ groovy -c UTF8 -cp . Main.groovy
出力しました

注意点

  • -cp オプションは groovy コマンド実行時に指定するクラスパスになります。
  • 2つのスクリプトは同じディレクトリに配置します。

要は、呼び出し対象のスクリプト配置ディレクトリにクラスパスを通してあげればいい、ということです。

以下のように、OSの CLASSPATH環境変数 に設定されているディレクトリに Printer.groovy スクリプトを配置してもしてもOKです。

# 別ディレクトリに移動させる
$ mv Printer.groovy /tmp

# 環境変数だけ設定しておく
$ export CLASSPATH=/tmp

$ groovy Main.groovy
出力しました

2019-01-23Groovy