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