Skip to content
Tianxiang Xiong edited this page Apr 15, 2017 · 19 revisions

It's possible to create self-contained, executable Clojure scripts that can bring in Maven dependencies, using a shebang. Here is an example that runs a game like Lunar Lander:

Put this into a file called lunarlander:

#!/usr/bin/env boot (set-env! :dependencies '[[alandipert/hyperturbo "1.0.0"]]) (require '[alandipert.hyperturbo.lunar-lander :refer [run]]) (defn -main [& args] (run))

NOTE: Github wiki's syntax formatting is messed up and eats single quotes sometimes. The vector passed to set-env! above should be quoted.

Make the file executable:

chmod +x lunarlander 

Run the script:

./lunarlander 

Command-line args

If you define a -main function, it will be called and passed any command-line arguments.

(defn -main [& args] ...)

You can use Boot's built-in arg specification macro to get parsing of named args and automatic --help generation as well:

(require '[boot.cli :refer [defclifn]]) (defclifn -main [a awesome bool "Whether you want this app to be awesome or not. (Default true)"] ...)

In addition to the raw task *opts*, defclifn exports trailing-arguments bound to *args*:

(require '[boot.cli :refer [defclifn]]) (defclifn -main [a awesome bool "Whether you want this app to be awesome or not. (Default true)"] (println "Named parameters " *opts*) (println "List of arguments " *args*))

Calling boot tasks from the script

 (boot (some-task))
Clone this wiki locally