はじめに

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 から確認できます。

環境

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

comments powered by Disqus