我目前为我的Clojure项目设置了一个设置,它允许我通过在Leiningen的项目地图中配置配置文件,将配置从dev
切换到test
或prod
。与配置文件相关的部分如下所示:
:main ^:skip-aot myproject.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all}
:dev {:env {:clj-env :development
:database-uri "jdbc:postgresql://localhost:5432/db_dev"}}
:test {:env {:clj-env :test
:database-uri "jdbc:postgresql://localhost:5432/db_test"}}
:production {:env {:clj-env :production
:database-uri "jdbc:postgresql://localhost:5432/db"}}})
问题是我想进一步增强这一点,并能够在多个电源之间切换。我在其他帖子中看到,人们通常通过配置像这里这样的配置文件来实现这一点。
我不知道该怎么做的是如何保留我拥有的配置,以便配置文件对应于环境,但也进一步配置它,以便能够通过简单地向lein run
添加一个参数来选择主类。
我已经发现一种方法显然是保持只有一个主类并使用实际的 Clojure 代码添加多路复用,但我希望能够通过 lein 配置做到这一点。
在尝试了多个选项后,我发现这样做的唯一方法是通过aliases
。
首先将:main
选项设置为 nil,因此清单。MF 没有任何Main.class
集,然后只需添加几个别名来指定要运行的主类。
:main nil
:target-path "target/%s"
:aliases {"main1" ["run" "-m" "project.main1.core"]
"main2" ["run" "-m" "project.main2.core"]}