Skip to content

Using Boot in a Leiningen Project

Jim Riordan edited this page Mar 15, 2017 · 8 revisions

The from-lein task below will setup basic environment parameters taken from a project.clj for Boot. This makes it possible to run things like:

  • boot from-lein watch build-jar
  • boot from-lein build-jar, etc.

If you want to override settings make sure you do so after calling the from-lein task.

(def boot-version
  (get (boot.App/config) "BOOT_VERSION" "2.7.1"))

(deftask from-lein
  "Use project.clj as source of truth as far as possible"
  []
  (let [lein-proj (let [l (-> "project.clj" slurp read-string)]
                    (merge (->> l (drop 3) (partition 2) (map vec) (into {}))
                           {:project (second l) :version (nth l 2)}))]
    (merge-env! :repositories (:repositories lein-proj))
    (set-env!
      :certificates   (:certificates lein-proj)
      :source-paths   (or (into #{} (:source-paths lein-proj)) #{"src"})
      :resource-paths (or (into #{} (:resource-paths lein-proj)) #{"resources"})
      :dependencies   (into (:dependencies lein-proj)
                            `[[boot/core ~boot-version   :scope "provided"]
                              [adzerk/bootlaces "0.1.13" :scope "test"]]))

    (require '[adzerk.bootlaces :refer :all])
    ((resolve 'bootlaces!) (:version lein-proj))
    (task-options!
      repl (:repl-options lein-proj {})
      aot  (let [aot (:aot lein-proj)
                 all? (or (nil? aot) (= :all aot))
                 ns (when-not all? (set aot))]
             {:namespace ns :all all?})
      jar  {:main (:main lein-proj)}
      pom  {:project     (symbol (:project lein-proj))
            :version     (:version lein-proj)
            :description (:description lein-proj)
            :url         (:url lein-proj)
            :scm         (:scm lein-proj)
            :license     (get lein-proj :license {"EPL" "http://www.eclipse.org/legal/epl-v10.html"})}))
  identity)
Clone this wiki locally