启动lein任务(实际上 test ,默认情况下使用 :test 个人资料运行)。我想做的是从相当于
开始java -Dproperty1 = value -Dproperty2 = value2 task
网上有一些参考资料表明这应该可以正常工作:
project.clj:
...
:profiles {:test {:jvm-opts ["-Dproperty1=value" "-Dproperty2-value"]}}
我的测试运动员会忽略这一点。配置文件是正确的,如果我插入一些实际的jvm args(例如“-XX:+ PrintGC”之类的东西)它工作正常。但似乎没有拿起系统属性。有没有正确的方法来做到这一点?
答案 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"))])