7

リングライブラリを含むclojureプロジェクトを入手しました。これはproject.cljです:

(defproject words "1.0.0-SNAPSHOT"
:description "Websocket handler for sessions"
:dependencies [[org.clojure/clojure "1.4.0"]
  [org.clojure/clojure-contrib "1.2.0"]
  [aleph "0.3.0-alpha1"]
  [org.clojure/data.json "0.1.2"]
  [clj-redis "0.0.13-SNAPSHOT"]
  [compojure "0.6.2"]
  [clj-http "0.1.3"]]
:main words.play
;; Lein ring plugin will provide `lein ring server` functionality
;; (and some other relative to ring actions)
:plugins [[lein-ring "0.6.6"]]
:ring {:handler words.api/engine})

開発環境では、2つのコマンドで実行します。leinrunserver leinringserverと動作します。

本番環境では、依存関係を最小限に抑え、次のコマンドを使用してスタンドアロンjarにビルドします。

lein uberjar

1つのjarファイルから両方のサーバーをビルドして実行するにはどうすればよいですか?

4

3 に答える 3

5

に関して

:main words.play

次のような-main関数を実装することをお勧めしますwords.play

(defn -main [& args]
  (case (first args)
    "server1" (do (println "Starting server1") (start-server1))
    "server2" (do (println "Starting server2") (start-server2))
    (println "Enter server name, pls")))

:gen-classこれは名前空間の定義で必要であることに注意してください。

(ns words.play
    (:gen-class))

リング、アレフなどの具体的なフレームワークの実装に依存する必要がstart-server1あります(詳細については、関連ドキュメントを参照してください)。start-server2(run-jetty ...)(start-http-server ...)

使用法:

lein uberjar
## to start first server
java -jar my-project-1.0.0-SNAPSHOT-standalone.jar server1
## to start second one
java -jar my-project-1.0.0-SNAPSHOT-standalone.jar server2
于 2012-08-24T10:06:21.793 に答える
4

最も簡単なアプローチは、アプリケーションを起動するclojureソースファイルからクラスをプリコンパイルすることです。関数-mainは最終的にのようなものを呼び出す必要があり(run-jetty #'engine {:port 8080})ます。

Clojureの事前コンパイル(「aot」)に慣れていない場合の優れたチュートリアルは次のとおりです。http: //kotka.de/blog/2010/02/gen-class_how_it_works_and_how_to_use_it.html

次に、そのようなものでアプリケーションを起動するシェルスクリプトを作成する必要がありますjava -cp you-uber.jar words.Main

「アプリランチャー」クラスの名前と最終的なjar名は完全に任意であることに注意してください。

于 2012-08-22T16:10:21.770 に答える
0

を使用できますlein ring uberjar。これでリングサーバーが起動します。:initラインリングが提供するフックで他のサーバーを起動できます。

于 2013-06-22T04:43:57.563 に答える