有没有办法在leinegen中设置系统属性?

时间:2015-09-01 04:31:56

标签: clojure leiningen

启动lein任务(实际上 test ,默认情况下使用 :test 个人资料运行)。我想做的是从相当于

开始
  

java -Dproperty1 = value -Dproperty2 = value2 task

网上有一些参考资料表明这应该可以正常工作:

project.clj:

...
:profiles {:test {:jvm-opts ["-Dproperty1=value" "-Dproperty2-value"]}}

我的测试运动员会忽略这一点。配置文件是正确的,如果我插入一些实际的jvm args(例如“-XX:+ PrintGC”之类的东西)它工作正常。但似乎没有拿起系统属性。有没有正确的方法来做到这一点?

3 个答案:

答案 0 :(得分:3)

找到答案,对于其他任何正在努力解决这个问题的人:

由于我需要在之前注入环境属性,所以我开始了这个过程,我做了以下事情:

shell插件添加到project.clj:

:plugins [[lein-shell" 0.4.1"]]

然后将准备任务添加到您的个人资料中。但是有一个皱纹 - 你认为你可以做到这一点:

:profiles {:test {:prep-tasks [["shell" "export" "foo=bar"]]}}

但是这不起作用,因为shell没有看到导出命令 - 你得到"没有这样的文件",因为它是bash的一部分而且那里&#39 ; s没有名为" export"的可执行文件。所以我创建了一个名为" setenv.sh"的脚本。并从shell运行:

:profiles {:test {:prep-tasks [["shell" "./test/setenv.sh"]]}}

编辑:实际上这不起作用,变量不会转移到子进程。留在这里因为它可能对某人有用。

编辑:实际上必须创建一个调用export的shell脚本然后运行lein。绝对不是最优雅的解决方案。

答案 1 :(得分:0)

出于这个目的,我们使用environ

安装插件后,您只需在项目根目录中创建一个文件.lein-env,其中包含要设置的环境变量的映射,例如:

{
  :s3-access-key     "some key"
  :s3-secret-key     "some secret"
}

然后,在您的代码中,您可以使用:

(require '[environ.core :refer [env]])
(env :s3-access-key) ;; "some key"

这让我可以指出测试中的存根服务器,但如果没有提供.lein-env,生产环境中的真实内容将使用系统环境变量。

我希望这会有所帮助。

答案 2 :(得分:0)

project.clj:

(defproject ...
    :injections [(.. System (setProperty "custom_key" "24623472372576878923"))])