はじめに
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
1. Hello Worldアプリ
概要
Spark Framework - A tiny Java web frameworkを利用したHello World.
実行
git clone https://github.com/kaakaa/gradle-frontend-boilerplate.git
cd gradle-frontend-boilerplate
git checkout sec_1
./gradlew run
ビルドスクリプト
plugins { // (1) - 使用するGradleプラグインを宣言
id 'java'
id 'application'
}
group 'org.kaakaa'
version '1.0-SNAPSHOT'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
mainClassName = 'org.kaakaa.spark.Main' // (2) - applicationプラグインから実行されるメインクラス名を指定
repositories {
mavenCentral() // (3) - dependencies節に書かれた依存関係解決にMaven Centralを使用することを宣言
}
dependencies {
compile 'com.sparkjava:spark-core:2.3' // (4) - spark-coreへの依存性を宣言
}
task wrapper(type: Wrapper) {
gradleVersion = '2.12'
}
(1) 使用するGradleプラグインを宣言
Gradleで使用するプラグインを宣言します。
JavaプラグインでJavaプロジェクトのビルドに関する情報がひと通り取り込まれます。
今回使用するWebフレームワークのspark
は、Javaのmainメソッドにルーティングを定義するため、mainメソッドの実行を楽にできる
アプリケーション プラグインを使用しています。
(2) applicationプラグインから実行されるメインクラス名を指定
application
プラグインで使用するメインクラスはmainClassName
としてパッケージ名を含めて指定しておきます。
run
タスクを実行するとmainClassName
で指定したmainメソッドが実行されます。
(3) dependencies節に書かれた依存関係解決にMaven Centralを使用することを宣言
GradleではMavenリポジトリを参照して依存関係を解決しますが、参照するリポジトリはrepositories
節で宣言します(51.6. リポジトリ).
MavenCentralやjCenterなど、よく使われるMavenリポジトリにはシンタックスが用意されています。
(4) spark-coreへの依存性を宣言
実際にJavaプロジェクトで使用するライブラリ(今回ではspark-core
のみ)はdependencies
節に宣言します。
ここでcompile
と指定しているのは、java
プラグインにより追加されるconfigurationで、Javaソースのcompile時に参照されることを宣言しています(runtime時にも参照されますが)。
java
プラグインにより追加されるconfigurationについては 8.3. 依存関係のコンフィグレーション を参照ください。
アプリケーションコード
package org.kaakaa.spark;
import static spark.Spark.get;
import static spark.Spark.port;
public class Main {
public static void main(String[] args) {
port(8080); // (1) - 起動ポートの指定
get("/hello", (rq, rs) -> "Hello World!"); // (2) - Routing
}
}
(1) 起動ポートの指定
Sparkアプリを起動した際の起動ポートを指定します。
デフォルトは4567
です。
(2) Routing
Sparkでのルーティングの宣言方法です。
この場合、http://localhost:8080/hello
にアクセスすると、Hello World!
という文字列を返すことになります。
SparkのRoutingについては、公式サイトを読むとよく分かると思います。
Spark Framework - Documentation