2

我有一个包含三个子项目的项目(使用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 文件中的所有依赖项和其他设置的方式启动每个环服务器?

有任何想法吗?

4

2 回答 2

0

这只是一个建议,因为我无法验证这是否会立即生效。

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

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

:source-paths ["src"]

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

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

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

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

于 2012-05-11T18:41:22.487 回答
0

我最终构建了一个元服务器来一次启动所有三个码头实例。代码在这里:

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

于 2012-09-19T19:53:54.650 回答