Gradleタスクで、Groovyコードを指定して動かしてみよう。
Groovyスクリプトを外部から指定して実行することができるので、いろいろ便利になります。
Gradle内蔵のGroovyを利用できるので、Groovyを別途インストールしなくても動作します。
build.gradle の書き方
configurations {
groovyScript
}
dependencies {
groovyScript localGroovy()
}
task groovyRun(type: JavaExec) {
classpath configurations.groovyScript
main = 'groovy.ui.GroovyMain'
doFirst {
if (!project.hasProperty("e")) {
throw new IllegalArgumentException("""
|usage:
|
|./gradlew $name -Pe='
|println "hello"
|'
|""".stripMargin())
}
systemProperties = System.properties
args '-e', project.e
}
}
configurations
configurations で、groovyScritpというのを定義します。
configurationは、Gradleの依存関係を表現するために定義される名前です。
javaプラグインを適用している時は、自動で compile, runtime などが定義されています。
./gradlew dependencies
をすると出てくる項目が、configurationとなります。
./gradlew dependencies を叩いたときの出力例
$ ./gradlew dependencies
> Task :dependencies
------------------------------------------------------------
Root project
------------------------------------------------------------
annotationProcessor - Annotation processors and their dependencies for source set 'main'.
No dependencies
apiElements - API elements for main. (n)
No dependencies
archives - Configuration for archive artifacts.
No dependencies
compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).
ここでは新しく、groovyScritpというものを定義しました。 (名称は何でもOKです。)
dependencies
Gradleは、内部でGroovyを利用しているため、
localGroovy()
というのを使えばGradle内蔵のGroovyを使うことができます。
先程、定義したConfigurationの、groovyScriptは、Gradle内蔵のGroovyに依存すると定義しています。
classpath
タスクとして実行する際に、type: JavaExec
として設定しています。
classpath には、依存するconfigurationを設定できますので、
追加で、mainのソースに依存させることも可能です。
classpath configurations.groovyScript, sourceSets.main.runtimeClasspath
実行してみよう。
こんな感じで 指定のgroovyコードを実行させることができます。
./gradlew -q groovyRun -Pe='
// ここにGroovyコードを指定できる。
println "hello"
'
このような書き方ができると、build.gradleはそのままで、
シェルスクリプトにしていろいろ手軽にGroovyコードが実行できるようになりますよね。
おしまい
src/main/groovy 配下にGroovyコード書けばいいじゃんと思いますが、
groovyRunタスクを一つ用意しておくだけで、わざわざ新たにタスクを用意しなくても、
簡素な処理であれば、シェルスクリプトにGroovyコードを書いて実行する事ができるので、柔軟かつ手軽で良いかと思います。