Gradle で Jetty9 を使用
今のところ Gradle 標準の jetty プラグインでは Jetty6 しか使えないようなので、Servlet 3.0 を使いたいケースでは不便です。
この場合、build.gradle で Jetty9 の起動処理を自前で実装する手も考えられますが、Gradle Jetty Plugin for Eclipse Jetty (gradle-jetty-eclipse-plugin) を使った方が簡単だと思います。 (他にも gradle-jetty9-plugin というのもあります )
gradle-jetty-eclipse-plugin を使うと gradle jettyEclipseRun
で Jetty 9.0.6 を起動できます。
gradle-jetty-eclipse-plugin の使い方
使用するには、build.gradle へ下記の設定を追加するだけです。
- gradle-jetty-eclipse-plugin を使用するための buildscript を定義
jettyEclipse
を apply plugin する
gradle-jetty-eclipse-plugin を使用するための build.gradle 設定
apply plugin: 'jettyEclipse' buildscript { repositories { jcenter() maven { url 'http://dl.bintray.com/khoulaiz/gradle-plugins' } } dependencies { classpath (group: 'com.sahlbach.gradle', name: 'gradle-jetty-eclipse-plugin', version: '1.9.+') } }
なお、jcenter()
の部分は Jetty9 のモジュールを取得できるリポジトリであればよいようなので mavenCentral()
でも問題ないようです。
Jetty9 の実行
それでは @WebServlet
アノテーションを使った単純な Servlet を実行してみます。
サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20140203/ に配置しています。
まずは build.gradle です。
gradle-jetty-eclipse-plugin の利用設定を追加し、providedCompile で Servlet 3.0 の API を指定しました。
build.gradle
apply plugin: 'jettyEclipse' buildscript { repositories { jcenter() maven { url 'http://dl.bintray.com/khoulaiz/gradle-plugins' } } dependencies { classpath (group: 'com.sahlbach.gradle', name: 'gradle-jetty-eclipse-plugin', version: '1.9.+') } } repositories { mavenCentral() } dependencies { providedCompile 'javax.servlet:javax.servlet-api:3.0.1' }
Servlet は "sample" という文字を出力するだけの単純な処理を実装しました。
SampleServlet.java
package fits.sample; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns = {"/sample"}) public class SampleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.getWriter().print("sample"); } }
それでは gradle jettyEclipseRun
で実行してみます。
ちなみに、標準 jetty プラグインのような jettyRun
と jettyRunWar
のような区別はありません。
実行
> gradle jettyEclipseRun :compileJava :processResources UP-TO-DATE :classes :war :jettyEclipseRun Empty contextPath !RequestLog Hit <ENTER> to reload the webapp. Hit r + <ENTER> to rebuild and reload the webapp. Hit R + <ENTER> to rebuild the webapp without reload > Building 80% > :jettyEclipseRun > Running at http://localhost:8080/
これで Jetty9 が起動し、http://localhost:8080/sample へ接続すると "sample" という文字が返ってくるはずです。