はじめに
Java/Spark プロジェクトの Gradle を利用したビルド/デプロイについて、私が試したことをまとめたものです。
(ここで言うSpark
は、分散処理ライブラリのApache Spark
ではなく、Java の Sinatra ライクな Microframework のSpark
のことです)
目次
- Hello World アプリ
- jade テンプレートエンジン
- Grunt/bower による Web パッケージのビルド
- 付録 A. TravisCI によるビルド
- 付録 B. Gradle で docker build
- 付録 C. TravisCI から DockerHub へ docker push
各章でのソースコードは Commits · kaakaa/gradle-frontend-boilerplate から確認できます。
環境
- Java 1.8.0_74
- Gradle 2.12
- spark-core 2.3
- spark-template-jade 2.3
- node.js 4.4.0
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