はじめに
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