参考にさせていただいたサイト
Executable WARs with Jetty ≪ EclipseSource Blog
http://eclipsesource.com/blogs/2009/10/02/executable-wars-with-jetty/
これをGradleで実行するコードがGitHubで配布されてる。
https://github.com/xlson/standalone-war
GitHubのコードはJetty 6で作成するものなので、
書き換えてJetty 7で動作させるようにする。
まず、ここを書き換える。
build.gradle
dependencies { compile group: 'org.eclipse.jetty', name: 'jetty-webapp', version: '7.2.1.v20101111' }
次に、
Starter.java
server.addHandler(context);
を
Starter.java
server.setHandler(context);
に書き換える。
Jetty関連のインポート文を変える。
import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.bio.SocketConnector; import org.eclipse.jetty.webapp.WebAppContext;
プロキシに接続する必要があるときは、こうしといた(ちょっとダサい)。
static { System.setProperty("http.proxyHost", "xxx.xxx.xxx"); System.setProperty("http.proxyPort", "8080"); }
VM引数で渡しても、コンテナに設定が届いてないっぽいから。
Gradleはダウンロードして、パスを通す。
gradle -PinWar=xxx.war
とすると、xxx-standalone.warとして実行可能なWARができる。
Gradleのコードは、unzipしてマニフェストファイルとサーバーコードを追加してるだけだけど、依存関係がGradleで簡単に解決できる(つまりはMaven?)。
生まれて初めてGradleに触ったからよく知らない。
できたWARを
java -jar xxx-standalone.war
で実行すると、Jettyが起動する。
こうすると、サーブレットコンテナをセットアップする必要がないから、簡単に配布できる(Hudsonがそうだよね)。
デモとかでは使いやすい。
こっちはJDKのセットアップはいるけど。
さらに、コンテナがすでにあるなら、ただのWARなので、もちろんそのままデプロイもできる。