Skip to content

Checkout Dependencies

Martin Klepsch edited this page Aug 2, 2017 · 2 revisions

With boot 2.6.0 the checkouts task got deprecated in favor of a more integrated environment parameter.

An example

Let's say we want to develop clojure.java-time simultaneously while working on a bigger project. First we need to depend on clojure.java-time as usual. To now also refresh the jar whenever it changes we add the same dependency coordinate to the checkouts option.

(set-env! :dependencies [[clojure.java-time "0.3.1-SNAPSHOT"]]
          :checkouts [[clojure.java-time "0.3.1-SNAPSHOT"]])

This is theoretically also possible using command line options, but there's currently an outstanding bug with it that needs fixing.

Now with the above set-env! call in our build.boot we can just run boot repl.

In the example below I defined a function java-time/foo inside java_time.clj. At first it prints "test". Then I change the function inside my clojure.java-time (git-)checkout and run lein install to get an updated jar into my Maven repository. Boot will pick up the new jar and add it to the classpath. The only thing users are required to do is reloading namespaces.

Once you've done that the new code should be loaded. Of course the reloading of namespaces can be simplified with something like clojure.tools.namepsace.

Adding checkout dependency clojure.java-time...
nREPL server started on port 55194 on host 127.0.0.1 - nrepl://127.0.0.1:55194
REPL-y 0.3.7, nREPL 0.2.12
Clojure 1.8.0
Java HotSpot(TM) 64-Bit Server VM 1.8.0_112-b16
        Exit: Control+D or (exit) or (quit)
    Commands: (user/help)
        Docs: (doc function-name-here)
              (find-doc "part-of-name-here")
Find by Name: (find-name "part-of-name-here")
      Source: (source function-name-here)
     Javadoc: (javadoc java-object-or-class-here)
    Examples from clojuredocs.org: [clojuredocs or cdoc]
              (user/clojuredocs name-here)
              (user/clojuredocs "ns-here" "name-here")
boot.user=> (require 'java-time)
nil
boot.user=> (java-time/foo)
test
nil
boot.user=> (java-time/foo)
test
nil
boot.user=> (require 'java-time :reload-all)
nil
boot.user=> (java-time/foo)
testing some more
nil
boot.user=> Bye for now!
Clone this wiki locally