Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

Jetty 7で動作するHudsonのような実行可能なWARを作成する(Gradleも使う)

参考にさせていただいたサイト
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なので、もちろんそのままデプロイもできる。