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上的效果如何