Adam Schmideg
Adam Schmideg

Reputation: 10850

Pass argument to leiningen readable by project.clj

I have a project.clj file that I want to use differently depending on an argument passed in when called by leiningen. Here is my hypothetical sample project

(defproject simple "0.0.1"
  :source-paths [(get-argument "source.path")])

(In this case get-argument would simply call System/getProperty). I would use this file like this,

lein2 compile -Dsource.path=path/to/location

The problem is two-fold,

I have found some approaches

(What I actually want to use it for is that I have a clojurescript project with different artifacts. While it's possible to configure different builds for it, they all share the same crossovers.)

Upvotes: 5

Views: 1920

Answers (1)

Chouser
Chouser

Reputation: 5208

One approach that is convenient on unix-like platforms is to use an environment variable, combined with lein's willingness to evaluate expressions marked with a tilde in project.clj files. So for your example, you could provide a project.clj like:

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

...then set the environment variable when launching lein like this:

MY_SRC_PATH="s2" lein compile

I don't know how well this approach would work on Windows.

Upvotes: 11

Related Questions