将参数传递给project.clj可读的leiningen

Ada*_*deg 3 clojure argument-passing command-line-arguments leiningen

我有一个project.clj文件,我想根据leiningen调用时传入的参数使用不同的文件.这是我的假设示例项目

(defproject simple "0.0.1"
  :source-paths [(get-argument "source.path")])
Run Code Online (Sandbox Code Playgroud)

(在这种情况下get-argument只会打电话System/getProperty).我会像这样使用这个文件,

lein2 compile -Dsource.path=path/to/location
Run Code Online (Sandbox Code Playgroud)

问题是双重的,

  • 我不知道如何向莱宁根传递论据.它不接受-Dkey=value语法.我在关于传递可选/额外参数的文档中找不到任何内容.我错过了一些明显的东西吗
  • 里面的子表格defproject似乎是以特殊方式处理的.我找不到一种简单的方法来将代码放入其中.

我找到了一些方法

(我实际想要使用它的是我有一个带有不同工件的clojurescript项目.虽然可以为它配置不同的构建,但它们都共享相同的交叉.)

Cho*_*ser 9

在类似unix的平台上,一种方便的方法是使用环境变量,并结合lein愿意评估project.clj文件中带有波浪号的表达式.所以对于你的例子,你可以提供一个project.clj像:

(defproject simple "0.0.1"
  :source-paths [~(System/getenv "MY_SRC_PATH")]
  :dependencies [[org.clojure/clojure "1.5.0"]])

...然后在启动lein时设置环境变量,如下所示:

MY_SRC_PATH="s2" lein compile

我不知道这种方法在Windows上的效果如何.