🪰

GradleでWildflyを自動でダウンロードしてからArquillianを実行する

2015/05/29に公開

Java EEなアプリケーションのテストを回すのにArquillian が便利なんですけど、サンプル書くのに手動でアプリケーションサーバをダウンロードするのはちょい面倒なので、Gradleにダウンロードしてもらうっていう話です。

アプリケーションサーバはWildflyを使用します。

それではbuild.gradleをいじりましょー!

まずdependenciesにWildflyのアーカイブを追加します。

dependencies {
    archives "org.wildfly:wildfly-dist:$wildflyVersion@zip"
}

次にアーカイブをunzipするタスクを書きます。

task readyWildfly(type: Copy) {
    def wildflyZip = configurations.archives.find { it.name ==~ /wildfly.*/ }

    from zipTree(wildflyZip)
    into buildDir

    inputs.file wildflyZip
    outputs.upToDateWhen { new File(buildDir, "wildfly-$wildflyVersion").exists() }
}

既にunzipされたWildflyがあったらタスクをスキップしてほしいのでinputs.fileoutputs.upToDateWhenでこちょこちょやっています。

最後にテストを実行する前にreadyWildflyタスクを実行するようにします。

test.dependsOn readyWildfly

あとはgradlew buildするだけ。

ログはこんな感じ。

:compileJava
:processResources UP-TO-DATE
:classes
:war
:assemble
:readyWildfly
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build

BUILD SUCCESSFUL

Total time: 31.107 secs

This build could be faster, please consider using the Gradle Daemon: http://gradle.org/docs/2.4/userguide/gradle_daemon.html

testの前にreadyWildflyタスクが実行されていますね。
この時点で所定の場所へWildflyがunzipされています。

ではもう一度gradlew buildしてみましょう。

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:war UP-TO-DATE
:assemble UP-TO-DATE
:readyWildfly
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build UP-TO-DATE

BUILD SUCCESSFUL

Total time: 10.617 secs

This build could be faster, please consider using the Gradle Daemon: http://gradle.org/docs/2.4/userguide/gradle_daemon.html

なんということでしょう!
readyWildflyタスクがスキップされま......されてない!?

あれー???(´・_・`)

も、もう一度実行だ!

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:war UP-TO-DATE
:assemble UP-TO-DATE
:readyWildfly UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build UP-TO-DATE

BUILD SUCCESSFUL

Total time: 8.532 secs

This build could be faster, please consider using the Gradle Daemon: http://gradle.org/docs/2.4/userguide/gradle_daemon.html

なぜスキップされたし(・_・)

というわけで、なんかあと一歩で出来てない感がありますが、一番の目的である「自動でWildflyの準備してArquillian走らせる」ってのは出来たので一旦これで良いやー。

コード:

https://github.com/backpaper0/sandbox/tree/8e408ef7ef7cb545d789cc035c6849e5468741ac/jaxrs-async-sample

Discussion