Eclipse + Gradle + WebAppをGradleプロジェクトから
今更感もありますがメモだす(・ω・)一度作っとけば終わるので、Gradleから作っといたほうが使いまわしが効く感じなんだけどなんとなくEclipse側からGradleプロジェクト作ってのGradle + WebAppの構成を用意したい場合もあるかなと思いメモ。色々と参考に回ってみてGradle > apply eclipseでやるのしか見つけられなかった事もあり自分用に。。。もっといい方法があるはずだけど。流れとしては1.Gradleプロジェクトを作る2.プロジェクト・ファセットを設定する3.index.html作ってHello World4.Servlet + jspからHello World(任意)5.resourcesフォルダを作る6.Warを作る私の環境OS : Windows7Eclipse : 4.5 Mars(pleiades) + BuildshipGradle : 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 Worldhtmlページを作って実際に確認します。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/resourcessrc/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内にあります。という感じで終わりです。う~んどっちもめんどう?