JavaビルドツールGradle入門(2/2)
次世代JavaビルドツールGradle入門2回目。前回作成したサンプルプロジェクトをWebアプリのビルド設定に変更する。プロジェクトのひな形作成については前回の記事「JavaビルドツールGradle入門(1/2) - SEチャンネル」を参照されたい。
依存ライブラリの追加
ビルドツールの最も根幹の機能は依存ライブラリの追加である。Gradleではbuild.gradleのdependenciesタグに追加する。デフォルトでは既に2つのライブラリが指定されているはずだ。
dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' }
ここに以下のpom.xml形式で記述されたSpring Frameworkのライブラリを追加してみよう。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.0.0.RELEASE</version> </dependency>
追加後のbuild.gradleは以下のようになる。指定方法もMavenと同じく、group、name(artifactId)、versionを指定する。
build.gradle
dependencies { compile group: 'org.springframework',name: 'spring-webmvc',version: '4.0.0.RELEASE' compile group: 'commons-collections',name: 'commons-collections',version: '3.2' testCompile group: 'junit',name: 'junit',version: '4.+' }
eclipseのGradleプラグインは、Mavenのように自動でライブラリがダウンロードされない。eclipse上でプロジェクトを右クリック>「Gradle」から「Refresh Dependencies」をクリックする。
Gradle Dependenciesにspring-webmvc-4.0.0.RELEASE.jarと、さらにspring-webmvcが依存しているライブラリが追加されているはずだ。
ちなみにこのライブラリはどこからダウンロードしているかというと、なんとMavenのセントラルリポジトリからダウンロードされている。build.gradleにリポジトリ先が指定されているので、もし参照先リポジトリを変更する場合はここに記述すればよい。
repositories { mavenCentral() }
Mavenセントラルの使用やMavenと同じGAV情報によるライブラリ指定と、GradleはMavenからの乗り換えをかなり意識した設計となっている。
sponsor
warビルド
次にプロジェクトをWebアプリケーション化しよう。まずwarにビルドするため、warプラグインの記述を追加する。
build.gradle
apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'war'
またWebアプリケーションのWebコンテンツ・ディレクトリも作成する。mavenと同じくsrc/main/webappが推奨だが、srcディレクトリとして追加する点がmavenと異なっている。追加した後のディレクトリツリーは以下のようになる。
動的Webモジュールfacetの追加と、gradleの参照ライブラリをWEB-INF/libに追加する設定も行っておく。
ここまでの設定で、基本的なWebアプリのビルド設定は完了である。該当プロジェクトを右クリック>「Gradle Build ... 」を選択し、前回jarと入力したタスクをwarに変更してビルドを実行すればwarファイルが作成されるはずだ。
環境依存ファイルの差し替え
最後に環境依存ファイルの差し替え方法について解説する。単体試験や結合試験などの環境ごとに異なる設定ファイルをwarに含める場合、そのファイルを差し替えたwarを作成する必要がある。例えばDB接続先、AP内部で使用するURL(IP)、ログ出力レベルなどの設定ファイルが該当する。
まず環境ごとのリソース格納先を作成する。gradleではsrc/<プロファイル名>/resourcesが推奨である。src/main/resourcesに本番環境用の全設定ファイルを配置し、src/<プロファイル名>/resourcesには上書きするファイルのみ配置する。ディレクトリツリーは以下のようになる。
今回はenvというプロファイル名で作成した。src/main/resources配下にも上書き対象の同名のファイルを配置している。次にbuild.gradleに指定したプロファイルのリソースを読み込む設定を追加する。
sourceSets { main { resources { srcDirs "src/main/resources" srcDirs "src/$profile/resources" } } }
実際にwarにビルドを行ってみよう。envプロファイルでwarを作成する場合は、build.gradleに指定した$profile変数にプロファイル名を渡す必要があるので、gradle実行時に-Pオプションを用いる。
Runでビルドを実行すればsrc/env/resources配下の設定ファイルを含むwarが作成されるはずである。もしプロファイルを指定せずにsrc/main/resourcesのみでビルドする場合は-Pprofile=mainを指定すればよい。
build.gradle
最終的にbuild.gradleは以下の様になる。
apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'war' sourceCompatibility = 1.5 version = '1.0' jar { manifest { attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version } } repositories { mavenCentral() } dependencies { compile group: 'org.springframework', name: 'spring-webmvc', version: '4.0.0.RELEASE' compile group: 'org.springframework.security', name: 'spring-security-core', version: '4.0.0.RELEASE' compile group: 'org.springframework.security', name: 'spring-security-web', version: '4.0.0.RELEASE' compile group: 'org.springframework.security', name: 'spring-security-config', version: '4.0.0.RELEASE' compile group: 'org.springframework.data', name: 'spring-data-mongodb', version: '1.2.0.RELEASE' compile group: 'cglib', name: 'cglib', version: '2.2.2' compile group: 'com.google.guava', name: 'guava', version: '19.0-rc2' providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0' providedCompile group: 'javax.servlet.jsp', name: 'javax.servlet.jsp-api', version: '2.3.1' providedCompile group: 'javax.servlet', name: 'jstl', version: '1.2' testCompile group: 'junit', name: 'junit', version: '4.+' } sourceSets { main { resources { srcDirs "src/main/resources" srcDirs "src/$profile/resources" } } } test { systemProperties 'property': 'value' } uploadArchives { repositories { flatDir { dirs 'repos' } } }
読み込んでいるライブラリは、以前作成したWebアプリで使用したライブラリである。
まとめ
今回はJavaビルドツールGradleを使用してWebアプリのビルド設定を行った。GradleはMavenのセントラルを流用していたり、GAV情報でライブラリを指定したりと、Mavenから乗り換えのハードルはかなり低いため、今Mavenを使用しているなら乗り換えることをおすすめする。
sponsor