如何从正在运行的repl中确定当前的leiningen配置文件?

时间:2016-06-16 20:46:43

标签: clojure leiningen

当IDE为您启动REPL时,当前的活动配置文件集不明确。在这种情况下,您能以某种方式查询Leiningen以找出它们可能是什么吗?

2 个答案:

答案 0 :(得分:1)

通常,我在project.clj上定义各种配置文件,分别指向每个配置文件,例如

  :profiles {:release {:resource-paths ["config/release"]
                          :source-paths ["src"]
                          }
             :test {:resource-paths ["config/test"]
                       :source-paths ["src" "test"]
                       }
             :dev {:resource-paths ["config/dev"]
                   :source-paths ["src" "dev"]}}

因此,对于“ config”中的每个文件夹都有一个config.edn,其中包含我拥有的每个配置文件所需的信息,您可以在每个config.edn中添加一个:profile关键字,并为其指定不同的值。每个人都可以显示当时哪个个人资料处于活动状态。我使用yogthos config来加载配置文件。

除此之外,我真的不希望IDE控制nrepl,通常它会在IDE关闭时杀死repl,并且对传递给lein的选项有严格的限制。我更喜欢使用lein with-profile dev repl在不同于我的编辑器的终端中启动repl,然后在我的编辑器上连接该nrepl会话,这样您就可以确定所使用的配置文件。

答案 1 :(得分:1)

据我所知,无法查看正在运行的REPL中加载了哪些概要文件。就像任何程序都不知道它从哪个终端窗口启动。也就是说,profiles and how they work is documented

仅仅知道哪些是“活动的”并不总是足够的。有时知道以什么顺序也很重要。

要解决此问题,请将以下内容添加到您的project.clj

  :profiles {
             :dev {:injections [(prn "including dev profile")]}
             :test {:injections [(prn "including test profile")]}
             :repl {:injections [(prn "including repl profile")]}
             :my-profile {:injections [(prn "including my-profile profile")]}

现在运行以下命令并查找输出"including ...

lein repl
lein test
lein with-profile my-profile test
lein with-profile +my-profile test

请注意,:injections不在jar或uberjars(lein jarlein uberjar)中执行。这就是为什么我从上面的游乐场中排除了这个原因。