Clojure + Jettyでウェブアプリケーションを動作させるJarファイル

このところClojureを使ったウェブアプリケーションを書いていて、
そのアプリケーションを単体で動かそうとしたときのまとめを書いておこうと思います。

ウェブアプリケーションをJarファイルにパッケージしたというそれだけのことですが、ClojureでJarアプリケーションを作って動くことに感動したので。

前提としてLeiningenを使いCompojureでウェブアプリケーションを開発しています。
project.cljに以下の行を追加します。

(defproject hoge "1.0.0-SNAPSHOT"
  :main hoge.core
  ....

src/hoge/core.cljには以下のように記述しました。hoge.web/appというのをCompojureのdefroutesで定義しています。

(ns hoge.core
  (:use hoge.web
 compojure)
  (:gen-class))

(defn -main [& args]
  (run-server {:port (Integer/parseInt (first args))}
       "/*" (servlet app)))

これで、Leiningenを使いJarファイルを作成します。

lein uberjar

作成された、hoge-standalone.jarがJettyで起動するかを確認します。

java -jar hoge-standalone.jar 8080

Jettyの起動時のログが出力され、ブラウザでhttp://localhost:8080/を見るとアプリケーションとして動作してるかどうかが分かります。

あとは、このJarファイルをサーバへアップし起動すればOKです。

このやりかただとアプリケーション単体でアプリケーションサーバとして動かしているので、既存のウェブアプリケーションサーバに配置したい場合は、warにしてXMLファイルをゴニョゴニョすればいいんだと思います。

コメント

人気の投稿