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

Clojure 将参数传递给project.clj可读的leiningen,clojure,command-line-arguments,argument-passing,leiningen,Clojure,Command Line Arguments,Argument Passing,Leiningen,我有一个project.clj文件,我想根据leiningen调用时传入的参数来使用它。这是我假设的示例项目 (defproject simple "0.0.1" :source-paths [(get-argument "source.path")]) (在本例中,get参数只需调用System/getProperty)。我会像这样使用这个文件 lein2 compile -Dsource.path=path/to/location 问题是双重的 我不知道如何把论点传给莱宁根。它不接

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

(defproject simple "0.0.1"
  :source-paths [(get-argument "source.path")])
(在本例中,
get参数
只需调用
System/getProperty
)。我会像这样使用这个文件

lein2 compile -Dsource.path=path/to/location
问题是双重的

  • 我不知道如何把论点传给莱宁根。它不接受
    -Dkey=value
    语法。我在文档中找不到任何关于传递可选/额外参数的信息。我错过了什么明显的东西吗
  • defproject
    中的子表单似乎是以一种特殊的方式处理的。我找不到一个简单的方法把代码放进去
我找到了一些方法

  • 看起来很有希望,但它似乎只在正确的clojure代码中工作,而不是在project.clj中
  • --这是一个可以解决一半问题的变通方法
  • 介绍了如何评估project.clj中的代码
  • 承诺做一些肮脏的把戏,但我不能让它在我的环境中工作

(我实际上想使用它的原因是我有一个clojurescript项目,其中包含不同的工件。虽然可以为它配置不同的构建,但它们都共享相同的转换。)

在类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"]]) (定义项目简单“0.0.1” :源路径[~(System/getenv“MY\u SRC\u PATH”)] :依赖项[[org.clojure/clojure“1.5.0”]] …然后在启动lein时设置环境变量,如下所示:

MY_SRC_PATH="s2" lein compile MY_SRC_PATH=“s2”lein编译 我不知道这种方法在Windows上的效果如何