I find boot-clj
to be good at doing rapid prototypes. It can be considered analogous to GroovyConsole. We can dynamically add dependencies, write, modify code, run, experiment all within a single file without having to create a project as with default lein
setup. Create a folder for experiments and add boot.properties
in it.
#https://github.com/boot-clj/boot
BOOT_CLOJURE_NAME=org.clojure/clojure
BOOT_VERSION=2.7.1
BOOT_CLOJURE_VERSION=1.8.0
Then we can create prototype file, say pilot.clj
with the below example template.
#!/usr/bin/env boot
;; To add some repository
(merge-env! :repositories [["clojars" {:url "https://clojars.org/repo/" :snapshots true}]])
(defn deps [new-deps]
"Add dependencies to the namespace."
(merge-env! :dependencies new-deps))
;; Add clojure
(deps '[[org.clojure/clojure "1.8.0"]])
;; Require
(require '[clojure.string :as str])
;; Import
(import '[javax.crypto.spec SecretKeySpec])
(println (str/upper-case "hi")) ;; HI
For faster startup of boot-clj
, add the following to the shell profile (.zshrc
). Tune according to the machine.
# boot-clj faster startup
export BOOT_JVM_OPTIONS='
-client
-XX:+TieredCompilation
-XX:TieredStopAtLevel=1
-Xmx2g
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-Xverify:none'