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

Clojure 如何使用单个lein任务启动多个环形子项目?,clojure,leiningen,ring,Clojure,Leiningen,Ring,我有一个包含三个子项目的项目,如下所示: 每个内部都有一个环处理程序,如下所示: (defproject trident-api "0.1.0-SNAPSHOT" ... :ring {:handler trident.api.core/handler :servlet-name "trident-api" :init trident.api.core/init :port 33333}) 现在,我将进入每种类型: > le

我有一个包含三个子项目的项目,如下所示:

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

(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文件中的所有依赖项和其他设置


有什么想法吗?

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

在leiningen.core.project中,标识默认值。也许你可以写一个插件或fork-lein-sub?让它覆盖子项目的这些值吗?然后,您可以创建一个插件,在对每个子项目应用给定任务的同时,对每个子项目进行迭代

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

:source-paths ["src"]
然后,可以为每个子项目使用以下内容覆盖它:

:source-paths ["sub-project/src"]
如果使用所有相关的默认值,那么它可能会正常工作


也许有一种方法可以在Leiningen 2的个人资料中实现这一点,但我不确定。我想,如果您为父项目中的每个子项目创建一个概要文件,您可以在调用相应子项目上的任务时轻松地合并概要文件。

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

在leiningen.core.project中,标识默认值。也许你可以写一个插件或fork-lein-sub?让它覆盖子项目的这些值吗?然后,您可以创建一个插件,在对每个子项目应用给定任务的同时,对每个子项目进行迭代

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

:source-paths ["src"]
然后,可以为每个子项目使用以下内容覆盖它:

:source-paths ["sub-project/src"]
如果使用所有相关的默认值,那么它可能会正常工作


也许有一种方法可以在Leiningen 2的个人资料中实现这一点,但我不确定。我想,如果您为父项目中的每个子项目创建一个概要文件,那么在调用相应子项目上的任务时,您可以轻松地合并概要文件。

我最终构建了一个元服务器,以同时启动所有三个jetty实例。代码如下:


我最终构建了一个元服务器,以同时启动所有三个jetty实例。代码如下:


你试过什么?我想lein子代码将是一个很好的开始。我已经看完了代码,它非常简单。唯一的问题是,我如何防止进程加入创建的前两个jetty,同时仍然允许它们运行?lein sub似乎没有更改工作目录,而您似乎在执行cd子模块;lein ring服务器,你试过什么?我想lein子代码将是一个很好的开始。我已经看完了代码,它非常简单。唯一的问题是,我如何防止进程加入创建的前两个jetty,同时仍然允许它们运行?lein sub似乎没有更改工作目录,而您似乎在执行cd子模块;莱因环服务器。