はじめに

Java/Spark プロジェクトの Gradle を利用したビルド/デプロイについて、私が試したことをまとめたものです。 (ここで言うSparkは、分散処理ライブラリのApache Sparkではなく、Java の Sinatra ライクな Microframework のSparkのことです)

目次

  1. Hello World アプリ
  2. jade テンプレートエンジン
  3. Grunt/bower による Web パッケージのビルド
  4. 付録 A. TravisCI によるビルド
  5. 付録 B. Gradle で docker build
  6. 付録 C. TravisCI から DockerHub へ docker push

各章でのソースコードは Commits · kaakaa/gradle-frontend-boilerplate から確認できます。

環境

2. jade テンプレートエンジン

概要

Spark のテンプレートエンジンとしてneuland/jade4j: a jade implementation written in Javaを使用したサンプル.

実行

git clone https://github.com/kaakaa/gradle-frontend-boilerplate.git
cd gradle-frontend-boilerplate
git checkout sec_2

./gradlew run

ビルドスクリプト

plugins {
    id 'java'
    id 'application'
}

group 'org.kaakaa'
version '1.0-SNAPSHOT'

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

mainClassName = 'org.kaakaa.spark.Main'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.sparkjava:spark-core:2.3'
    compile 'com.sparkjava:spark-template-jade:2.3'  // (1) - jade4jへの依存を追加
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.12'
}

(1) jade4j への依存性を宣言

特に説明の必要はありませんが、spark で使用するテンプレートエンジンとしてspark-template-jadeを指定しています。 その他のテンプレートエンジンを使用する場合は Spark Framework - Documentation を。

アプリケーションコード

package org.kaakaa.spark;

import spark.ModelAndView;
import spark.template.jade.JadeTemplateEngine;

import java.util.Collections;

import static spark.Spark.get;
import static spark.Spark.port;

public class Main {
    public static void main(String[] args) {
        port(8080);

        // (1) - jadeテンプレートを指定
        get("/hello", (rq, rs) -> new ModelAndView(Collections.EMPTY_MAP, "hello"), new JadeTemplateEngine());
    }
}
doctype html
html(lang="ja")
  head
    title gradle-frontend-boilerplate
  body
    h1 gradle-frontend-boilerplate
    p Hello World!

(1) jade テンプレートを指定

/helloにアクセスされた場合、hello.jadeの jade テンプレートを元に生成された HTML を返すよう指定しています。

1. Hello Worldアプリではgetメソッドの第2引数のラムダ式は単なる String 文字列を返していましたが、テンプレートエンジンを使用する場合ModelAndViewクラスのインスタンスを返すようになります。 また、第3引数にテンプレートエンジンクラスのインスタンスを指定します。

ModelAndViewクラスのコンストラクタの第1引数にはテンプレート内で使用するオブジェクトを Map 形式で指定し(今回は使用しないため空の Map)、第2引数にはテンプレートファイルの拡張子を除いたファイル名を指定します。   この時、Spark は第2引数で指定されたテンプレートファイルを${projectDir}/src/main/resource/templatesフォルダから探します。

Spark がテンプレートファイルを探しに行くフォルダは、使用するテンプレートエンジンによって異なるようです。各 Spark 用テンプレートエンジンの README に書いてあるようなので、確認しましょう。 spark-template-engines/spark-template-jade at master · perwendel/spark-template-engines

comments powered by Disqus