Posted at

[備忘録!]GradleでWARを作る

More than 3 years have passed since last update.


1. はじめに

「簡単なServlet(HelloServlet的な)を持ったWARをGradleで作ってTomcatで動かしてみる。」という備忘録。

最初にことわっておきますと結構雑、且つ、必須ではない?ような手順が少し混ざっているかもしれません。

が、行った作業の備忘録という性質上ご容赦いただければありがたく思います。


  • 本稿範囲:


    • Gradleを使ってEclipseプロジェクトを作り

    • そのプロジェクトをimportしてEclipseでコーディングし

    • EclipseのGradle IDEを利用してWARを作り

    • Tomcatへ配布してWEBブラウザからServletが正しく動作する事を確認する



  • 対象読者:Gradleの初心者、GradleをWEBアプリ開発に活用したい方

  • 開発環境:OS X Mavericks v10.9.4

  • Gradle:Ver. 2.0

  • Eclipse:Ver. Luna Release (4.4.0)


2. Gradleのinstall

install、といってもZIPファイルを解凍して中に入っているbinディレクトリにPATHを通すだけの簡単なお仕事です。

こちらのサイトから、ZIPをDownloadしてきましょう。

.bash_profileのPATHの末尾にZIPを解凍して現れたbinへのパスを追加します。

うまくインストールできたか、以下のコマンドで確認します。

$ gradle -v

------------------------------------------------------------
Gradle 2.0
------------------------------------------------------------

Build time: 2014-07-01 07:45:34 UTC
Build number: none
Revision: b6ead6fa452dfdadec484059191eb641d817226c

Groovy: 2.3.3
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM: 1.7.0_45 (Oracle Corporation 24.45-b08)
OS: Mac OS X 10.9.4 x86_64


3. Eclipseのinstall

こちらのサイトからEclipseのDownloadをします。

今回は、「Eclipse Standard 4.4」をダウンロードしました。tarを解凍すれば終了です。

次にGradle IDEをインストールします。

Eclipseのメニュー「Help => Install New Software」を開きます。

http://dist.springsource.com/release/TOOLS/update/3.6.0.RELEASE/e4.2/」からGradle IDEをinstallします。

これをinstallすることで、Eclipse上からGradleを実行することが出来るようになります。

available_software.png

あとはWTP関連のプラグインもinstallしましたが必要ないかもしれません?

availabels_software_2.png


4. Eclipseプロジェクト作成

新しく適当なディレクトリを作成し、そこにbuild.gradleを作ります。

中身はこんな感じになります。


build.gradle

apply plugin: 'java'

apply plugin: 'eclipse'
apply plugin: 'eclipse-wtp'
apply plugin: 'war'

version = 1.0

sourceCompatibility = 1.7
targetCompatibility = 1.7

description = 'Sample Project'

ext {
slf4jVersion = '1.6.6' # 必須ではない slf4j
slf4jGroup = 'org.slf4j' # 必須ではない slf4j
}

configurations {
extraLib
}

repositories {
mavenCentral()
}

dependencies {
testCompile 'junit:junit:4.8' # 必須ではない JUnit
compile group:"org.apache.struts", name:"struts2-core", version:"2.3.16.3" # 必須ではない struts2 core
extraLib "$slf4jGroup:slf4j-api:$slf4jVersion", "$slf4jGroup:slf4j-simple:$slf4jVersion" # 必須ではない slf4j
providedCompile "javax.servlet:javax.servlet-api:3.1.0"
}


dependenciesに色々書いていますが、今回必要なのはprovidedCompile "javax.servlet:javax.servlet-api:3.1.0"だけです。

mavenCentralリポジトリから依存するパッケージ達を引張ってくる、という事をやっています。

javaxは、warに含める必要はないのでprovidedCompileにしています。

eclipseプラグインは、GradleからEclipse用のプロジェクトを作るプラグインです。

このプラグインが追加するeclipseというタスクを実行します。

build.gradleが置いてあるディレクトリで以下のようにコマンドを打ちます。

$ gradle eclipse

すると、.project、.classpath、.settingといったファイルが作られます。隠しファイルなので ls -aで、これらのファイルが作られている事を確認します。


5. プロジェクトの作成

それではEclipseから上の手順で作成したプロジェクトをimportしましょう。

Project Explorerを右クリックして、importです。

import_1.png

先程、プロジェクトファイルを作成したパスをRoot folderに入力し、 Build Modelボタンを押下しましょう。

下にプロジェクトが現れるので選択してfinishボタンを押下します。

import_2.png

importしたプロジェクトを右クリックしてPropertiesを選択します。

メニューからJava Build Pathを選択します。

Gradleのjavaプラグインにはプロジェクトレイアウトという概念があります。

この概念のデフォルト値に則った形でフォルダを作っていきます。

Java_build_path.png

次にServletを作ります。


TestServlet.java

package jp.co.resonance;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
PrintWriter out;
res.setContentType("text/html; charset=UTF-8");
out = res.getWriter();
out.println("Hello World!");
}
}


web.xmlも作ります。


web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID"
version="3.1">
<display-name>TestDynamicWebApp31</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>jp.co.resonance.TestServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet/*</url-pattern>
</servlet-mapping>
</web-app>


こんな感じになっていればOKです。

project_explorer.png


6. WARを作って配置

プロジェクトを右クリックして「Run As => Gradle Build...」を選択します。

warタスクを実行することでwarファイルが作られます。(勿論コンパイルもされます。)

gradle_build.png

build/libsに、warファイルが作られます。これをTomcatへ放り込みます。

(Tomcat環境の構築は割愛します。)


7. 動作確認

Servletが呼び出されるようにWEBブラウザからリクエストを投げます。

このような質素な画面が出れば成功です。

hello_world.png


8. さいごに

Gradleの記事をいくつか探しましたがAndroid Studioで使用するものは多いのですが、EclipseでWEBアプリ開発、というものをあまり見かけませんでした。

「WEBアプリ開発でGradleを使ってみようかな?」という方の一助になれば幸いでございます。

駄記事におつきあいいただきありがとうございます。


8.1. 参考文献

Gradleに関しては日本語の書籍があまりないので洋書で。(Kindleだと速攻で読めて、且つ、安いのでよいですね。)

* Gradle Effective Implementation Guide - Packt Publishing

あとはドキュメントの日本語訳が非常に充実しているので、こちらを多いに参考にするとよいかと思います。

* Gradle日本語ドキュメント