Gradel でビルドした war をその場で実行する

blog1.mammb.com


はじめに

Eclipse GlassFish 7.0.18 以降、glassfish-embedded の jar が実行可能 jar になったので、コマンドラインから war を渡すことで直接アプリケーションを実行できるようになりました。

blog1.mammb.com


Gradle で war を実行

Gradle で glassfish-embedded を実行すれば、ビルドした war を実行できます。

plugins {
    war
}

// ...

task<Exec>("run") {

    dependsOn("war")

    // download glassfish-embedded-all
    val url = "https://repo1.maven.org/maven2/org/glassfish/main/extras/glassfish-embedded-all/7.0.22/glassfish-embedded-all-7.0.22.jar"
    val dest = layout.projectDirectory.file("glassfish-embedded-all-7.0.22.jar")
    if (!dest.asFile.exists()) uri(url).toURL().openStream().use {
        `java.nio.file`.Files.copy(it, dest.asFile.toPath())
    }

    // run glassfish-embedded-all with war
    commandLine("java",
        "-Duser.language=en", "-Duser.country=US",
        "-jar", dest.asFile.absolutePath, "build/libs/app.war")

    standardInput = System.`in`  
}

上記 run タスクを作成しておけば、以下のように war をビルドしてそのまま実行することができます。

./gradlew war run