jar - 如何使用环形服务器构建 Clojure 应用程序

标签 jar clojure leiningen ring

我有一个包含环库的 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 个命令运行它: lein运行服务器 莱因环服务器 并且它有效。

对于生产环境,我想最大限度地减少依赖性并将其构建到独立的 jar 中:

lein uberjar

如何构建它并从一个 jar 文件运行两个服务器?

最佳答案

关于

:main words.play

我建议您在 words.play 中实现 -main 函数,例如

(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-server1start-server2 的实现应取决于具体框架:(run-jetty ...) 对于环, (start-http-server ...) 用于 aleph 等(您可以在相关文档中找到更多信息)。

用法:

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

关于jar - 如何使用环形服务器构建 Clojure 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12074975/

相关文章:

Java运行JarInputStream

maven-2 - maven-jar-plugin 和传递依赖

java - 禁止在 Eclipse 中登录 clojure?

Clojure:如何判断代码是在 REPL 还是 JAR 中运行?

Clojure Lein REPL 无法打开

clojure - 为什么 `lein run` 不是 `lein trampoline` ?

运行时出现 java.lang.NoClassDefFoundError : Need Class not on Classpath

java - 使用 ant build 创建的 jar 出现 NoClassDefFound 错误

clojure - 使用 clojure 扩展 java 抽象类 (java.lang.Classloader)

Clojure:应用或到列表