gradle がインストールされている前提。 されていない場合は以下で入れておく。
brew install gradle
開始
ターミナルに以下のブロックを全て選択してコピペする。
mkdir example cd example cat <<EOF > build.gradle plugins { id 'java' id 'war' id 'com.bmuschko.cargo' version "2.0.3" } repositories { mavenCentral() } [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' sourceCompatibility = 1.8 targetCompatibility = 1.8 dependencies { providedCompile 'org.jboss.spec:jboss-javaee-all-7.0:1.0.2.Final' testCompile 'junit:junit:4.11' } cargo { containerId = 'wildfly8x' deployable { file = file(war.archivePath) } local { installer { installUrl = 'http://download.jboss.org/wildfly/8.2.0.Final/wildfly-8.2.0.Final.zip' downloadDir = new File(buildDir, "download") extractDir = file("wildfly") } containerProperties { property 'cargo.jboss.configuration', 'standalone-full' } } } task wrapper(type: Wrapper) { gradleVersion = '2.2.1' } EOF mkdir -p src/main/java/example cat <<EOF > src/main/java/example/HelloWorld.java package example; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(name = "HelloWorld", urlPatterns = { "/HelloWorld" }) public class HelloWorld extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); PrintWriter writer = response.getWriter(); writer.println("<html>"); writer.println("<html><head><title>HelloServlet</title></head>"); writer.println("<body><h1>Hello Servlet</h1></body>"); writer.println("</html>"); } } EOF gradle wrapper ./gradlew war cargoRunLocal
しばらくして以下が出たら、
Press Ctrl-C to stop the container...
ブラウザで以下のURLにアクセス
http://localhost:8080/example/HelloWorld
完了。
秒速です。ダウンロードしてる時間除けば。
でも2回目からは完全に秒速です。
build.gradle
念のため説明書いておきます。
build.gradle は以下のようになります。秒速のコピペではヒアドキュメントで $
がシェル変数に解釈されてしまうので変えてあります。
plugins { id 'java' id 'war' id 'com.bmuschko.cargo' version "2.0.3" } repositories { mavenCentral() } [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' sourceCompatibility = 1.8 targetCompatibility = 1.8 dependencies { providedCompile 'org.jboss.spec:jboss-javaee-all-7.0:1.0.2.Final' testCompile 'junit:junit:4.11' } cargo { containerId = 'wildfly8x' deployable { file = file(war.archivePath) } local { installer { installUrl = 'http://download.jboss.org/wildfly/8.2.0.Final/wildfly-8.2.0.Final.zip' downloadDir = file("$buildDir/download") extractDir = file("wildfly") } containerProperties { property 'cargo.jboss.configuration', 'standalone-full' } } } task wrapper(type: Wrapper) { gradleVersion = '2.2.1' }
plugins
の指定は gradle 2.1 以降の id
表記でビルドスクリプトの定義が楽になりました。最下部の gradle wrapper で gradle の 2.2.1 を指定しています。
dependencies
では JavaEE 7 の API 仕様 を providedCompile
で指定しています。'javax:javaee-api:7.0' ではなく、jboss 提供のものとしています。'javax:javaee-api' には実装クラスまで入っているため(少なくとも6.0までは)、テスト時に変なハマり方するので jboss 提供のきれいなAPI 仕様を使うのが通例です。
デプロイは cargo にお任せで、containerId
に wildfly8x
指定しています。wildfly 自体も cargo の installer
指定で自動ダウンロードしてもらい、解凍ファイルは clean タスクで消されないようにプロジェクトルートに配備してます。
cargo プラグインの cargoRunLocal
タスクで wildfly ダウンロードから war のデプロイまでやってくれます。
containerProperties
でフルプロファイル指定にしています。そのままだと Web プロファイルになるので。
サーブレット
Java側は、EE 7 と言いながら EE 6 相当の実装しかしていませんが、
@WebServlet
指定で web.xml いらずの単純なサーブレットです。
package example; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(name = "HelloWorld", urlPatterns = { "/HelloWorld" }) public class HelloWorld extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); PrintWriter writer = response.getWriter(); writer.println("<html>"); writer.println("<html><head><title>HelloServlet</title></head>"); writer.println("<body><h1>Hello Servlet</h1></body>"); writer.println("</html>"); } }
秒速で始めましたが、wildfly の管理コンソールは管理ユーザ追加しないと入れなかったりするので、このへんは後ほど時間があれば。
以下に続く。