我有一个项目,有三个这样的子项目(使用 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文件中的所有依赖项和其他设置的方式启动每个环形服务器?
有什么想法吗?
这只是一个建议,因为我无法验证这现在是否有效。
leiningen.core.project
中有一个 var 用于标识默认值。也许你可以写一个插件(或fork lein-sub?)并让它覆盖子项目的这些值?然后,您可以创建一个插件,该插件在将给定任务应用于每个子项目的同时遍历每个子项目。
例如,默认值声明源路径,如下所示:
:source-paths ["src"]
然后,您可以为每个子项目使用以下内容覆盖它:
:source-paths ["sub-project/src"]
使用所有相关的默认值执行此操作,它可能会起作用。
也许有一种方法可以用Leiningen 2的个人资料做到这一点,但我不确定。我想如果您为父项目中的每个子项目创建一个配置文件,您可以在调用相应子项目上的任务时轻松合并配置文件。
我最终构建了一个元服务器来同时启动所有三个码头实例。 代码在这里:
https://github.com/antler/lein-caribou/blob/master/src/leiningen/caribou/server.clj