前記事で、LinuxにGradleを導入してJavaプロジェクトをビルドしました。今回は、既存のTomcat(JavaEE)のプロジェクトにGradleを適用したいと存じます。
既存ビルドがやっていること
・コンパイル→Warファイルを作成して終了(環境へのデプロイは手動)
・環境ごとに設定ファイルに差異があるため、Mavenビルド時に差し替える
いずれは、リリースまで全て自動化したいとは思いますが
まずは現状のビルドをGradleに変えるところまで実施します。
プロジェクト構成
現状の構成は以下のような形です
ファイル階層
gradle_war
|ーenv
||ーtest
|||ーapp.properties
||ーproduction
|||-app.properties
|ーsrc
WEB-INF/app.propertiesに設定内容を記載していて、環境ごとに差異があり、それぞれの環境向け設定ファイルは「env」以下の環境名ディレクトリに入っています。今回は、このプロジェクトにGradleを導入して、環境依存をファイル置き換えで解決するような、ビルドスクリプトを作成します。
Gradleの導入
インストール手順は、以前に書いたものを参照してください。
プロジェクト直下に、build.gradle(ビルドスクリプト)を作成する。
ファイル階層(ビルドスクリプト追加)
gradle_war
|ーbuild.gradle←追加
|ーenv
||ーtest
|||ーapp.properties
||ーproduction
|||-app.properties
|ーsrc
スクリプト内容は以下のようにしました
ビルドスクリプト
buildscript {
//ビルドスクリプト中に必要なモジュールを、参照する先を指定する
repositories {
jcenter()
}
//ビルド時に必要なもの(依存関係)
dependencies {
classpath 'com.bmuschko:gradle-tomcat-plugin:2.0'
}
}
apply plugin: 'war'
apply plugin: 'com.bmuschko.tomcat'
repositories {
mavenCentral()
}
//APサーバは、Tomcatで動かすため、コンパイルでも同環境を指定する
dependencies {
providedCompile 'javax:javaee-web-api:6.0'
compile 'org.slf4j:slf4j-api:1.7.18'
testCompile 'junit:junit:4.11'
def tomcatVersion = '8.0.32'
tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
"org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}"
tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") {
exclude group: 'org.eclipse.jdt.core.compiler',module: 'ecj'
}
}
//warファイル作成時のみ、環境依存ファイルを差し替える処理
war {
webInf{
from("env/${env}/app.properties")
}
}
ビルドコマンド
#プロジェクト直下に移動して
$ gradle -Penv=test(-Penv=production) build
ビルドコマンド時に、envという変数にtest/productionという文字列を渡しておき、warファイル作成時に、環境名のディレクトリから環境依存ファイルを取得して、WEB-INFディレクトリ以下にコピーするという動きとなります。Mavenで実施していることをそのまま書き写しただけですが、当初の目的である、MavenのビルドをGradleに置き換えました。