如何使用单个lein任务启动多个环子项目?

时间:2012-05-10 18:05:11

标签: clojure leiningen ring

我有一个包含三个子项目的项目(使用lein-sub):

(defproject trident "0.1.0"
  ...

  :sub
  ["admin"
   "api"
   "site"])

每个人都有一个环处理程序,如下所示:

(defproject trident-api "0.1.0-SNAPSHOT"
  ...

  :ring {:handler trident.api.core/handler
         :servlet-name "trident-api"
         :init trident.api.core/init
         :port 33333})

现在我进入每个并输入:

> lein ring server

这显然很烦人。我也试过

> lein sub ring server

它似乎应该可以工作,但它只启动第一个,并且进程加入它!可能有办法解决这个问题吗?这似乎是最简单的方法。

代替这一点,我现在正在编写一个leiningen任务来为我做这件事,但我遇到了一些问题。我可以使用leiningen.core.project / read轻松地获取每个项目文件,但是从这里开始,如何以尊重各自project.clj文件中的所有依赖项和其他设置的方式启动每个环服务器?

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这只是一个建议,因为我无法验证这是否可行。

leiningen.core.project中的

There is a var标识默认值。也许你可以编写一个插件(或fork lein-sub?)并让它覆盖子项目的这些值?然后,您可以创建一个插件,迭代每个子项目,同时将给定任务应用于每个子项目。

例如,默认值声明源路径如下:

:source-paths ["src"]

然后,您可以使用以下每个子项目覆盖它:

:source-paths ["sub-project/src"]

使用所有相关的默认值执行此操作,它可能正常工作。

Leiningen 2的个人资料可能有办法解决这个问题,但我不确定。我想如果你为父项目中的每个子项目创建一个配置文件,你可以在相应的子项目上调用任务时轻松合并配置文件。

答案 1 :(得分:0)

我最终建立了一个metaserver来同时启动所有三个jetty实例。代码在这里:

https://github.com/antler/lein-caribou/blob/master/src/leiningen/caribou/server.clj