leinjacker
leinjacker copied to clipboard
A library for Leiningen plug-in authors.
leinjacker
leinjacker is a library of utilities for Leiningen plug-in developers. Current features include:
-
leinjacker.evalgives you an easy way for your project to calleval-in-projectorshand have it work independent of the version of Leiningen the user is running. Additionally, there is a functionhook-eval-in-project. This function can be used provide custom behavior (like middleware) foreval-in-project, such as for code instrumentation or alternative JVM launching scripts.Finally, there is the
in-projectmacro. This allows you to eval code in your project without having to construct the form by hand. You just provide the bindings used to pass state to your project along with the code that uses those bindings. -
leinjacker.depsadds some handy functions for querying and manipulating the dependencies of a project. -
leinjacker.utilsprovides useful utilities for supporting multiple Leiningen generations, such as:try-resolveandtry-resolve-any- useful for resolving namespaced symbols at runtime.lein-generation- returns the current Leiningen generation (1 or 2) as an integer.lein-home- returns the path to current Leiningen home (typically~/.lein/). This abstracts away the location of Leiningen'sleiningen-home, since it moved between generations.read-lein-project- reads aproject.cljand returns the project map. This abstracts away the location and name of Leiningen's project read function, since it was renamed between generations.abort- 1.x- and 2.x-compatible way to signal task failure.apply-task- 1.x- and 2.x-compatible way to apply arguments to a task.get-classpath- 1.x- and 2.x-compatible way to get the classpath from a project map.
-
leinjacker.lein-runnerhas functions for finding and running theleincommand on the path for each Leiningen generation. Useful for testing plugins under various Leiningen versions. It provides:find-lein-cmd- looks forleinon the $PATH by trying to call it. It takes agenerationargument, which should be1or2. It will then look for a command calledleinorlein<generation>that reports the correct generation when called withlein version. It will memoize the found cmd to./.lein-commandsto speed up subsequent calls. This can be disabled via thememoize?arg.run-lein- Will execute the given Leiningengenerationindirwith the givenargs, returning the result map from the 'clojure.java.shell/sh' call.
See leinjacker's tests for examples of usage.
Usage
Just drop the following into your plug-in’s project.clj:
(defproject lein-tau "6.283"
:name "The π is a lie!"
;; other stuff
:dependencies [[leinjacker "0.4.2"]
;; more deps
])
Although this library is built using Leiningen 2, the library itself does not require it. It should also work with Clojure 1.2 and above.
Contributing
If you ever find yourself writing the same generic code in more than one of your plug-ins, feel free to send it here.
Contributors
- Daniel Solano Gómez
- Tobias Crawley
- Phil Hagelberg
- David Greenberg
- Justin Balthrop
- Anthony Grimes
License
Copyright © 2012 Sattvik Software & Technology Resources, Ltd. Co. All rights reserved.
Distributed under the Eclipse Public License, the same as Clojure.