今更感もありますがメモだす(・ω・)

一度作っとけば終わるので、Gradleから作っといたほうが使いまわしが効く感じなんだけど
なんとなくEclipse側からGradleプロジェクト作っての
Gradle + WebAppの構成を用意したい場合もあるかなと思いメモ。

色々と参考に回ってみて
Gradle > apply eclipseでやるのしか見つけられなかった事もあり自分用に。。。

もっといい方法があるはずだけど。
流れとしては

1.Gradleプロジェクトを作る
2.プロジェクト・ファセットを設定する
3.index.html作ってHello World
4.Servlet + jspからHello World(任意)
5.resourcesフォルダを作る
6.Warを作る


私の環境
OS : Windows7 
Eclipse : 4.5 Mars(pleiades) + Buildship
Gradle : 2.13

んでは以下から

1.Gradleプロジェクトを作る
ファイル > 新規 > プロジェクトで
Gradleプロジェクトを作成します。

プロジェクト名入れて普通に次へ、次へで完了します。
今回はプロジェクト名を「HelloGradleWeb」にしました。

※EclipseからだとGradleさんがJAVA_HOMEのパスを使わない場合があります。
その場合はEclipseからgradle buildした時だけtools.jarがないよ!なエラーとかでます。
なので心配な場合は 拡張オプション > Javaホーム・ディレクトリーでパスをいれときましょう。
もしくはgradle.propertiesファイルを作ってルートとかに配置してもいいです。
記述は org.gradle.java.home=jdkのパス って感じです。
個人的には後者のほうがEclipse以外でもという点で管理しやすいです。


2.プロジェクト・ファセットを設定する
プロジェクトができたら、以下の流れでプロジェクト・ファセットを設定して動的webプロジェクトとして利用できるようにします。

1: プロジェクト・ファセットの設定を開く
プロジェクトを選択して右クリック > プロパティを呼び出します。
プロパティ内にプロジェクト・ファセットというのがあるのでそこをクリックし
「ファセットホームへ変換」というのがあるのでそこもクリックして変換します。


2: 動的 WEB モジュールを追加する
変換したら色々チェックボックスがでますので「動的 WEB モジュール」にチェックを入れます。
「より詳しい構成が使用可能」と下にでるのでそれをクリックします。



3: コンテンツ・ディレクトリーのパスを設定
GradleのWebapp構成に合わせるためにコンテンツ・ディレクトリーの部分を以下のパスに変えます。

src/main/webapp

*同時にweb.xmlを配置してほしい場合は「web.xml デプロイメント記述子の生成」にチェックを入れてください。今回はチェックしてます。
「より詳しい構成が使用可能」を無視するとルートにWebContentフォルダが作られるので注意っぽい。


4: 動的 WEB モジュールで利用するランタイムを設定
 「動的 WEB モジュール」の右側にあるランタイムタブで使用するランタイムにチェック入れて適応します。

*通常の動的webプロジェクト等を作った事がある場合は基本あると思いますがない場合は新規で作ってくださいませ。。。
ちなみにたまにランタイムがNullエラーでます。。
環境なのかどうなのか、自分の場合は「ファセットホームへ変換」して一度適応してからやったら問題なかったり。



こんな感じになりました。



3.index.html作ってHello World
htmlページを作って実際に確認します。

1: index.htmlを作る。
配置場所は src/main/webapp 直下です。
*自動記述されたweb.xmlにwelcome-fileとしてindex.htmlがあるのでindexという名前にしてるだけです。
確認できればいいので適宜お好きな用に。

こんなコードにしてみました。
src/main/webapp/index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
Hello Gradle WebApp
</body>
</html>

2: 起動の確認
プロジェクトを右クリック、実行 > サーバーで実行してみましょう。

表示されたら成功です。


4.Servlet + jspからHello World (任意)
次にServlet + jspでページを呼び出してみます。
javaリソースはsrc/main/javaに配置します。


1: jspを作る。
今回ファイル名はhello.jspとします。
配置場所はindex.htmlと同じ場所です。

コードは適当に。。
src/main/webapp/hello.jsp
<%="HELLO JSP" %>


2: Servletを作る
今回は適当にパッケージを com.example として
Hello.javaというServletを作ります。
*コードは適当に。マッピングとかはServlet側で設定してますのでweb.xmはいじりません。
@WebServlet("/Hello")
public class Hello extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest req, HttpServletResponse res) 
throws ServletException, IOException {
RequestDispatcher rd = null;
rd = req.getRequestDispatcher("hello.jsp");
rd.forward(req, res);
}
}

3: 起動の確認
できたらさっき確認したurlの後ろに/Helloをつけてみましょう。
*自動で更新されない場合はサーバーを再起動して確認をしてください。

表示されればOKでございます。


5.resourcesフォルダを作る
全部確認できたらresourcesフォルダも用意します。
これはプロジェクト作った後にやってもいいです。
*なんとなくどこかの設定とかでこけたりして一から作り直したいって場合もあると思うので最後のほうにしました。

プロジェクトを右クリックし
ビルドパス > 新規ソースフォルダ から

src/main/resources
src/test/resources

を作るだけです。

SSは割愛します。
あとプロジェクト作った時に自動で作られたjavaファイルとかいらなければ削除っす。


6.Warを作る
Gradle全然使ってないので最後に。。。
 
build.gradleを開いて以下を追記して保存します。
dependenciesのservlet-apiも今回servlet使ってるので必要です。

apply plugin: 'war'

dependencies {
    providedCompile 'javax.servlet:javax.servlet-api:3.1.0' 
}


こんな感じになります(コメント部分除去)。
apply plugin: 'java'
apply plugin: 'war' //追加

repositories {
    jcenter()
}

dependencies {
    providedCompile 'javax.servlet:javax.servlet-api:3.1.0' //追加

//以下はいらなければ不要
    compile 'org.slf4j:slf4j-api:1.7.13' 
    testCompile 'junit:junit:4.12' 
}

あとは、Gradleタスクでwarタスクを実行してください。
タスクがなければタスク窓を更新(F5でOK)してみてください。
問題なければプロジェクトフォルダ内にbuildというフォルダがあるのでlibs内にあります。

という感じで終わりです。

う~んどっちもめんどう?