2009-10-31 21:35:25 +00:00
|
|
|
|
# Leiningen
|
|
|
|
|
|
2012-01-13 02:04:57 +00:00
|
|
|
|
<img src="https://github.com/downloads/technomancy/leiningen/leiningen-banner.png"
|
|
|
|
|
alt="Leiningen logo" title="The man himself" align="right" />
|
2012-01-13 00:10:32 +00:00
|
|
|
|
|
2009-11-12 05:25:16 +00:00
|
|
|
|
> "Leiningen!" he shouted. "You're insane! They're not creatures you can
|
|
|
|
|
> fight--they're an elemental--an 'act of God!' Ten miles long, two
|
|
|
|
|
> miles wide--ants, nothing but ants! And every single one of them a
|
2009-12-21 04:37:19 +00:00
|
|
|
|
> fiend from hell..."
|
2009-11-12 05:25:16 +00:00
|
|
|
|
> -- from Leiningen Versus the Ants by Carl Stephenson
|
2009-10-31 21:35:25 +00:00
|
|
|
|
|
2011-07-06 03:43:25 +00:00
|
|
|
|
Leiningen is for automating Clojure projects without setting your hair on fire.
|
2009-10-31 21:35:25 +00:00
|
|
|
|
|
2009-11-12 05:25:16 +00:00
|
|
|
|
## Installation
|
2009-11-02 07:02:16 +00:00
|
|
|
|
|
2012-01-24 03:06:29 +00:00
|
|
|
|
If your preferred
|
|
|
|
|
[package manager](https://github.com/technomancy/leiningen/wiki/Packaging)
|
|
|
|
|
has a relatively recent version of Leiningen, try that first.
|
|
|
|
|
Otherwise you can install by hand:
|
|
|
|
|
|
2011-10-19 23:24:30 +00:00
|
|
|
|
Leiningen bootstraps itself using the `lein` shell script;
|
|
|
|
|
there is no separate install script. It installs its dependencies
|
2010-09-10 17:02:26 +00:00
|
|
|
|
upon the first run on unix, so the first run will take longer.
|
2010-03-13 05:04:11 +00:00
|
|
|
|
|
2012-03-13 17:08:09 +00:00
|
|
|
|
1. [Download the script](https://raw.github.com/technomancy/leiningen/stable/bin/lein).
|
2012-02-08 05:00:02 +00:00
|
|
|
|
2. Place it on your `$PATH`. (I like to use `~/bin`)
|
2011-10-19 23:24:30 +00:00
|
|
|
|
3. Set it to be executable. (`chmod 755 ~/bin/lein`)
|
2010-09-10 17:02:26 +00:00
|
|
|
|
|
2012-03-13 17:08:09 +00:00
|
|
|
|
The instructions above will install the stable release. The Leiningen 2
|
|
|
|
|
[preview release](https://raw.github.com/technomancy/leiningen/preview/bin/lein)
|
|
|
|
|
has some great new features, but not all projects and plugins have
|
|
|
|
|
been upgraded to work with it yet. Please see the
|
|
|
|
|
[upgrade guide](https://github.com/technomancy/leiningen/wiki/Upgrading)
|
|
|
|
|
for instructions on migrating to version 2.
|
|
|
|
|
|
2011-10-19 23:24:30 +00:00
|
|
|
|
On Windows most users can get
|
|
|
|
|
[the batch file](https://raw.github.com/technomancy/leiningen/stable/bin/lein.bat).
|
2010-09-10 17:02:26 +00:00
|
|
|
|
If you have wget.exe or curl.exe already installed and in PATH, you
|
2011-10-19 23:24:30 +00:00
|
|
|
|
can just run `lein self-install`, otherwise get the standalone jar from the
|
|
|
|
|
[downloads page](https://github.com/technomancy/leiningen/downloads).
|
|
|
|
|
If you have [Cygwin](http://www.cygwin.com/) you should be able to use
|
|
|
|
|
the shell script above rather than the batch file.
|
2010-03-13 05:04:11 +00:00
|
|
|
|
|
2009-10-31 21:35:25 +00:00
|
|
|
|
## Usage
|
|
|
|
|
|
2010-06-19 03:56:36 +00:00
|
|
|
|
The
|
2012-03-07 22:27:26 +00:00
|
|
|
|
[tutorial](https://github.com/technomancy/leiningen/blob/preview/doc/TUTORIAL.md)
|
2010-06-19 03:56:36 +00:00
|
|
|
|
has a detailed walk-through of the steps involved in creating a new
|
|
|
|
|
project, but here are the commonly-used tasks:
|
|
|
|
|
|
2010-06-05 20:26:52 +00:00
|
|
|
|
$ lein new NAME # generate a new project skeleton
|
|
|
|
|
|
2009-11-29 22:20:09 +00:00
|
|
|
|
$ lein test [TESTS] # run the tests in the TESTS namespaces, or all tests
|
2009-11-02 06:47:21 +00:00
|
|
|
|
|
2012-02-08 05:00:02 +00:00
|
|
|
|
$ lein repl # launch an interactive REPL session
|
2009-10-31 21:35:25 +00:00
|
|
|
|
|
2010-06-22 02:21:13 +00:00
|
|
|
|
$ lein jar # package up the whole project as a .jar file
|
2009-11-09 06:09:39 +00:00
|
|
|
|
|
2010-08-18 05:21:53 +00:00
|
|
|
|
$ lein install [NAME VERSION] # install a project
|
|
|
|
|
|
2012-01-13 00:10:32 +00:00
|
|
|
|
$ lein search ... # find jars for your project.clj dependencies
|
2011-10-21 19:45:53 +00:00
|
|
|
|
|
2011-10-19 23:24:30 +00:00
|
|
|
|
Use `lein help` to see a complete list. `lein help $TASK` shows the
|
2012-01-13 00:10:32 +00:00
|
|
|
|
usage for a specific task.
|
2009-11-20 01:50:33 +00:00
|
|
|
|
|
2010-08-18 05:21:53 +00:00
|
|
|
|
You can also chain tasks together in a single command by using commas:
|
|
|
|
|
|
|
|
|
|
$ lein clean, test foo.test-core, jar
|
2010-08-17 05:05:24 +00:00
|
|
|
|
|
2010-08-18 05:21:53 +00:00
|
|
|
|
Most tasks need to be run from somewhere inside a project directory to
|
2012-02-08 05:00:02 +00:00
|
|
|
|
work, but some (`new`, `help`, `search`, `version`, and the
|
2011-10-19 23:24:30 +00:00
|
|
|
|
two-argument version of `install`) may run from anywhere.
|
2010-08-18 05:21:53 +00:00
|
|
|
|
|
2011-10-19 23:24:30 +00:00
|
|
|
|
The install task places shell scripts in the `~/.lein/bin`
|
2010-08-18 05:21:53 +00:00
|
|
|
|
directory for projects that include them, so if you want to take
|
2011-10-19 23:24:30 +00:00
|
|
|
|
advantage of this, you should put it on your `$PATH`.
|
2010-08-17 05:05:24 +00:00
|
|
|
|
|
2009-10-31 21:35:25 +00:00
|
|
|
|
## Configuration
|
|
|
|
|
|
2011-10-19 23:24:30 +00:00
|
|
|
|
The `project.clj` file in the project root should look like this:
|
2011-08-17 20:13:17 +00:00
|
|
|
|
|
2012-01-13 01:10:35 +00:00
|
|
|
|
```clj
|
2011-08-17 20:13:17 +00:00
|
|
|
|
(defproject myproject "0.5.0-SNAPSHOT"
|
|
|
|
|
:description "A project for doing things."
|
|
|
|
|
:url "http://github.com/technomancy/myproject"
|
2012-02-08 05:00:02 +00:00
|
|
|
|
:dependencies [[org.clojure/clojure "1.2.1"]]
|
2012-01-13 00:10:32 +00:00
|
|
|
|
:plugins [[lein-ring "0.4.5"]])
|
2011-08-18 01:00:12 +00:00
|
|
|
|
```
|
2009-10-31 21:35:25 +00:00
|
|
|
|
|
2012-01-13 00:10:32 +00:00
|
|
|
|
To find specific versions of a dependency, use `lein search`.
|
2009-11-14 22:24:36 +00:00
|
|
|
|
|
2011-10-19 23:24:30 +00:00
|
|
|
|
The `lein new` task generates a project skeleton with an
|
2010-06-15 05:23:13 +00:00
|
|
|
|
appropriate starting point from which you can work. See the
|
2012-03-07 22:27:26 +00:00
|
|
|
|
[sample.project.clj](https://github.com/technomancy/leiningen/blob/preview/sample.project.clj)
|
2010-06-19 03:56:36 +00:00
|
|
|
|
file for a detailed listing of configuration options.
|
2009-11-17 04:24:36 +00:00
|
|
|
|
|
2010-08-18 05:21:53 +00:00
|
|
|
|
You can also have user-level configuration that applies for all
|
2011-10-19 23:24:30 +00:00
|
|
|
|
projects. The `~/.lein/init.clj` file will be loaded every time
|
2010-11-19 05:39:44 +00:00
|
|
|
|
Leiningen launches; any arbitrary code may go there. This code is
|
|
|
|
|
executed inside Leiningen itself, not in your project. Set the
|
2011-10-19 23:24:30 +00:00
|
|
|
|
`:repl-init` key in project.clj to point to a namespace if
|
2010-11-19 05:39:44 +00:00
|
|
|
|
you want code executed inside your project.
|
2010-11-07 23:50:25 +00:00
|
|
|
|
|
2012-01-13 01:10:35 +00:00
|
|
|
|
### Profiles
|
2012-01-13 00:10:32 +00:00
|
|
|
|
|
2012-01-13 01:10:35 +00:00
|
|
|
|
You can change the configuration of your project by applying various
|
2012-02-08 05:00:02 +00:00
|
|
|
|
profiles. For instance, you may want to have a few extra test data
|
|
|
|
|
directories on the classpath during development without including them
|
|
|
|
|
in the jar, or you may want to have Swank Clojure available in every
|
|
|
|
|
project you hack on without modifying every single project.clj you use.
|
|
|
|
|
|
|
|
|
|
By default the `:dev`, `:user`, and `:default` profiles are activated
|
|
|
|
|
for each task. Each profile is defined as a map which gets merged into
|
|
|
|
|
your project map. To add resources directories during development, add
|
|
|
|
|
a `:profiles` key to project.clj like so:
|
|
|
|
|
|
|
|
|
|
```clj
|
|
|
|
|
(defproject myproject "0.5.0-SNAPSHOT"
|
|
|
|
|
:description "A project for doing things."
|
|
|
|
|
:dependencies [[org.clojure/clojure "1.2.1"]]
|
|
|
|
|
:profiles {:dev {:resources-path ["dummy-data"]}})
|
|
|
|
|
```
|
2011-10-21 19:57:15 +00:00
|
|
|
|
|
2012-02-08 05:00:02 +00:00
|
|
|
|
You can place any arbitrary defproject entries into a given profile
|
|
|
|
|
and they will be merged into the project map when that profile is
|
|
|
|
|
active. In addition to `project.clj`, profiles specified in
|
|
|
|
|
`~/.lein/profiles.clj` will be available in all projects.
|
2012-01-13 01:10:35 +00:00
|
|
|
|
|
2012-02-08 05:00:02 +00:00
|
|
|
|
```clj
|
2012-02-08 15:40:07 +00:00
|
|
|
|
{:user {:plugins [[lein-swank "1.4.0"]
|
2012-02-08 05:00:02 +00:00
|
|
|
|
[lein-pprint "1.1.1"]]}}
|
|
|
|
|
```
|
2012-01-13 01:10:35 +00:00
|
|
|
|
|
2012-02-08 05:00:02 +00:00
|
|
|
|
Another use of profiles is to test against various sets of dependencies:
|
2012-01-13 01:10:35 +00:00
|
|
|
|
|
2012-02-08 05:00:02 +00:00
|
|
|
|
```clj
|
|
|
|
|
(defproject swank-clojure "1.5.0-SNAPSHOT"
|
|
|
|
|
:description "Swank server connecting Clojure to Emacs SLIME"
|
|
|
|
|
:dependencies [[org.clojure/clojure "1.2.1"]
|
|
|
|
|
[clj-stacktrace "0.2.4"]
|
|
|
|
|
[cdt "1.2.6.2"]]
|
|
|
|
|
:profiles {:1.3 {:dependencies [[org.clojure/clojure "1.3.0"]]}
|
|
|
|
|
:1.4 {:dependencies [[org.clojure/clojure "1.4.0-beta1"]]}})
|
2012-02-08 15:34:39 +00:00
|
|
|
|
```
|
2012-01-13 01:10:35 +00:00
|
|
|
|
|
2012-02-08 05:00:02 +00:00
|
|
|
|
To activate other profiles for a given run, use the `with-profile`
|
2012-01-13 02:04:57 +00:00
|
|
|
|
higher-order task:
|
2012-01-13 01:10:35 +00:00
|
|
|
|
|
2012-02-08 05:00:02 +00:00
|
|
|
|
$ lein with-profile qa,1.3 test :database
|
2012-01-13 01:10:35 +00:00
|
|
|
|
|
2012-01-13 03:15:02 +00:00
|
|
|
|
Multiple profiles may be specified with commas:
|
|
|
|
|
|
|
|
|
|
$ lein with-profile qa,user test :database
|
|
|
|
|
|
2012-01-13 01:10:35 +00:00
|
|
|
|
A single `with-profile` call does not apply across task comma-chains.
|
|
|
|
|
|
2012-02-08 05:00:02 +00:00
|
|
|
|
To see how a given profile affects your project map, use the
|
|
|
|
|
[lein-pprint](https://github.com/technomancy/leiningen/tree/master/lein-pprint)
|
|
|
|
|
plugin:
|
|
|
|
|
|
|
|
|
|
$ lein pprint
|
|
|
|
|
{:compile-path "/home/phil/src/leiningen/lein-pprint/classes",
|
|
|
|
|
:group "lein-pprint",
|
|
|
|
|
:source-path ("/home/phil/src/leiningen/lein-pprint/src"),
|
|
|
|
|
:dependencies
|
|
|
|
|
([org.clojure/tools.nrepl "0.0.5" :exclusions [org.clojure/clojure]]
|
|
|
|
|
[clojure-complete "0.1.4" :exclusions [org.clojure/clojure]]
|
|
|
|
|
[org.thnetos/cd-client "0.3.3" :exclusions [org.clojure/clojure]]),
|
|
|
|
|
:target-path "/home/phil/src/leiningen/lein-pprint/target",
|
|
|
|
|
:name "lein-pprint",
|
|
|
|
|
[...]
|
|
|
|
|
:description "Pretty-print a representation of the project map."}
|
2012-01-29 21:59:07 +00:00
|
|
|
|
|
2012-01-13 01:10:35 +00:00
|
|
|
|
### Leiningen Plugins
|
|
|
|
|
|
2012-01-13 02:04:57 +00:00
|
|
|
|
Leiningen supports plugins which may contain both new tasks and hooks
|
|
|
|
|
that modify behaivour of existing tasks. See
|
2012-01-13 01:10:35 +00:00
|
|
|
|
[the plugins wiki page](https://github.com/technomancy/leiningen/wiki/Plugins)
|
|
|
|
|
for a full list. If a plugin is needed for successful test or build
|
|
|
|
|
runs, (such as `lein-tar`) then it should be added to `:plugins` in
|
2011-10-21 21:36:40 +00:00
|
|
|
|
project.clj, but if it's for your own convenience (such as
|
2012-01-13 00:10:32 +00:00
|
|
|
|
swank-clojure) then it should be added to the `:plugins` list in the
|
2012-01-13 02:04:57 +00:00
|
|
|
|
`:user` profile from `~/.lein/profiles.clj`. The
|
2012-03-07 22:27:26 +00:00
|
|
|
|
[plugin guide](https://github.com/technomancy/leiningen/blob/preview/doc/PLUGINS.md)
|
2012-01-13 02:04:57 +00:00
|
|
|
|
explains how to write plugins.
|
2010-10-25 02:49:48 +00:00
|
|
|
|
|
2009-11-05 04:25:13 +00:00
|
|
|
|
## FAQ
|
|
|
|
|
|
2009-11-06 04:34:14 +00:00
|
|
|
|
**Q:** How do you pronounce Leiningen?
|
2011-03-22 04:07:10 +00:00
|
|
|
|
**A:** It's LINE-ing-en. ['laɪnɪŋən]
|
2009-11-05 04:25:13 +00:00
|
|
|
|
|
2010-03-13 05:04:11 +00:00
|
|
|
|
**Q:** What's a group ID? How do snapshots work?
|
|
|
|
|
**A:** See the
|
2012-03-07 22:27:26 +00:00
|
|
|
|
[tutorial](https://github.com/technomancy/leiningen/blob/preview/doc/TUTORIAL.md)
|
2010-06-22 02:21:13 +00:00
|
|
|
|
for background.
|
|
|
|
|
|
|
|
|
|
**Q:** How should I pick my version numbers?
|
|
|
|
|
**A:** Use [semantic versioning](http://semver.org).
|
2010-03-13 05:04:11 +00:00
|
|
|
|
|
2009-12-21 04:37:19 +00:00
|
|
|
|
**Q:** What if my project depends on jars that aren't in any repository?
|
2012-03-07 22:27:26 +00:00
|
|
|
|
**A:** The [deploy guide](https://github.com/technomancy/leiningen/blob/preview/doc/DEPLOY.md)
|
2011-07-06 03:43:25 +00:00
|
|
|
|
explains how to set up a private repository. If you are not sharing
|
2012-01-13 00:10:32 +00:00
|
|
|
|
them with a team you could also just [install locally](https://github.com/kumarshantanu/lein-localrepo).
|
2009-12-02 06:28:58 +00:00
|
|
|
|
|
2010-06-22 02:21:13 +00:00
|
|
|
|
**Q:** I want to hack two projects in parallel, but it's annoying to switch between them.
|
2012-01-13 00:10:32 +00:00
|
|
|
|
**A:** If you create a directory called `checkouts` in your project
|
|
|
|
|
root and symlink some other project roots into it, Leiningen will
|
|
|
|
|
allow you to hack on them in parallel. That means changes in the
|
|
|
|
|
dependency will be visible in the main project without having to go
|
|
|
|
|
through the whole install/switch-projects/deps/restart-repl cycle,
|
|
|
|
|
and the copy in `checkouts` will take precedence over the dependency
|
|
|
|
|
declared in project.clj. Note that this is not a replacement for
|
|
|
|
|
listing the project in `:dependencies`; it simply supplements that for
|
|
|
|
|
convenience.
|
2010-03-13 05:04:11 +00:00
|
|
|
|
|
2009-12-21 21:37:38 +00:00
|
|
|
|
**Q:** Is it possible to exclude indirect dependencies?
|
2010-06-05 20:26:52 +00:00
|
|
|
|
**A:** Yes. Some libraries, such as log4j, depend on projects that are
|
2009-12-21 21:28:19 +00:00
|
|
|
|
not included in public repositories and unnecessary for basic
|
2012-01-13 00:10:32 +00:00
|
|
|
|
functionality. Projects listed as `:dependencies` may exclude
|
|
|
|
|
any of their dependencies by using the `:exclusions` key. See
|
|
|
|
|
`lein help sample` for details.
|
2010-06-05 20:26:52 +00:00
|
|
|
|
|
2012-01-13 00:10:32 +00:00
|
|
|
|
**Q:** What does `java.lang.NoSuchMethodError: clojure.lang.RestFn.<init>(I)V` mean?
|
2010-06-22 02:21:13 +00:00
|
|
|
|
**A:** It means you have some code that was AOT (ahead-of-time)
|
|
|
|
|
compiled with a different version of Clojure than the one you're
|
2011-10-19 23:24:30 +00:00
|
|
|
|
currently using. If it persists after running `lein clean` then it
|
2011-03-22 04:07:10 +00:00
|
|
|
|
is a problem with your dependencies. Note that for
|
2010-06-22 02:21:13 +00:00
|
|
|
|
your own project that AOT compilation in Clojure is much less
|
|
|
|
|
important than it is in other languages. There are a few
|
|
|
|
|
language-level features that must be AOT-compiled to work, generally
|
|
|
|
|
for Java interop. If you are not using any of these features, you
|
|
|
|
|
should not AOT-compile your project if other projects may depend
|
|
|
|
|
upon it.
|
2010-11-04 02:46:13 +00:00
|
|
|
|
|
2011-07-06 04:25:46 +00:00
|
|
|
|
**Q:** I'm behind an HTTP proxy; how can I fetch my dependencies?
|
2012-04-03 08:54:22 +00:00
|
|
|
|
**A:** See the instructions for [configuring a Maven proxy](http://maven.apache.org/guides/mini/guide-proxies.html).
|
|
|
|
|
TODO: document aether proxy setup.
|
2011-07-06 04:25:46 +00:00
|
|
|
|
|
2010-11-04 02:46:13 +00:00
|
|
|
|
**Q:** What can be done to speed up launch?
|
2011-04-13 02:08:00 +00:00
|
|
|
|
**A:** The main delay involved in Leiningen comes from starting the
|
2012-01-13 00:10:32 +00:00
|
|
|
|
JVM. Most people use a development cycle that involves keeping a
|
|
|
|
|
single process running for as long as you're working on that
|
|
|
|
|
project. Depending on your editor you may be able to do this via its
|
|
|
|
|
Clojure integration. (See
|
2011-04-13 02:08:00 +00:00
|
|
|
|
[swank-clojure](http://github.com/technomancy/swank-clojure) or
|
2012-01-13 00:10:32 +00:00
|
|
|
|
[VimClojure](https://bitbucket.org/kotarak/vimclojure), for
|
|
|
|
|
example.) Otherwise you can use the basic `lein repl`.
|
2010-11-21 04:37:36 +00:00
|
|
|
|
|
|
|
|
|
**Q:** Still too slow; what else can make startup faster?
|
2012-01-23 19:25:11 +00:00
|
|
|
|
**A:** If you are running an older version of Leiningen (before 1.7)
|
|
|
|
|
you can `export LEIN_JVM_OPTS=-XX:+TieredCompilation` to improve
|
|
|
|
|
boot time. This requires Hotspot version 20 or newer. On newer versions
|
|
|
|
|
of Leiningen it is enabled automatically.
|
2011-02-19 04:43:29 +00:00
|
|
|
|
|
|
|
|
|
**Q:** I don't have access to stdin inside my project.
|
2011-11-15 22:45:48 +00:00
|
|
|
|
**A:** This is a limitation of the JVM's process-handling methods;
|
|
|
|
|
none of them expose stdin correctly. This means that functions like
|
|
|
|
|
`read-line` will not work as expected in most contexts, though the
|
|
|
|
|
`repl` task necessarily includes a workaround. You can also use the
|
|
|
|
|
`trampoline` task to launch your project's JVM after Leiningen's has
|
|
|
|
|
exited rather than launching it as a subprocess.
|
2010-11-04 02:46:13 +00:00
|
|
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
|
2012-01-16 04:43:12 +00:00
|
|
|
|
Please report issues on the
|
|
|
|
|
[Github issue tracker](https://github.com/technomancy/leiningen/issues)
|
|
|
|
|
or the [mailing list](http://groups.google.com/group/leiningen).
|
|
|
|
|
Personal email addresses are **not** appropriate for bug reports. See
|
|
|
|
|
the readme for the `leiningen-core` library and `doc/PLUGINS.md` for
|
2012-03-07 02:06:21 +00:00
|
|
|
|
more details on how Leiningen's codebase is structured. Design
|
|
|
|
|
discussions also occur in the
|
|
|
|
|
[#leiningen channel on Freenode](irc://chat.freenode.net#leiningen).
|
2009-12-21 04:37:19 +00:00
|
|
|
|
|
2011-07-20 02:04:15 +00:00
|
|
|
|
Patches are preferred as Github pull requests, though patches from
|
2011-12-05 03:43:14 +00:00
|
|
|
|
`git format-patch` are also welcome on the mailing list. Please use
|
|
|
|
|
topic branches when sending pull requests rather than committing
|
2011-07-20 02:04:15 +00:00
|
|
|
|
directly to master in order to minimize unnecessary merge commit
|
|
|
|
|
clutter.
|
|
|
|
|
|
|
|
|
|
Contributors who have had a single patch accepted may request commit
|
2012-01-13 00:10:32 +00:00
|
|
|
|
rights on the mailing list or in IRC. Please use your judgment
|
|
|
|
|
regarding potentially-destabilizing work and branches. Other
|
|
|
|
|
contributors will usually be glad to review topic branches before
|
|
|
|
|
merging if you ask on IRC or the mailing list.
|
2011-07-20 02:04:15 +00:00
|
|
|
|
|
|
|
|
|
Contributors are also welcome to request a free
|
|
|
|
|
[Leiningen sticker](http://twitpic.com/2e33r1) by asking on the
|
|
|
|
|
mailing list and mailing a SASE.
|
|
|
|
|
|
2010-07-28 03:13:56 +00:00
|
|
|
|
## Building
|
|
|
|
|
|
2010-10-06 03:23:01 +00:00
|
|
|
|
You don't need to "build" Leiningen per se, but when you're using a
|
2012-01-13 02:04:57 +00:00
|
|
|
|
checkout you will need to get its dependencies in place.
|
2010-07-28 03:13:56 +00:00
|
|
|
|
|
2012-03-20 20:53:09 +00:00
|
|
|
|
For the master branch, use Leiningen 1.x to run `lein install` in the
|
|
|
|
|
`leiningen-core` subproject directory. When the dependencies change
|
|
|
|
|
you will also have to do `rm .lein-classpath` in the project root.
|
2010-11-11 04:49:45 +00:00
|
|
|
|
|
2012-02-08 02:15:24 +00:00
|
|
|
|
Once you've done that, symlink `bin/lein` to somewhere on your
|
|
|
|
|
`$PATH`, usually as `lein2` in order to keep it distinct from your
|
|
|
|
|
existing installation.
|
|
|
|
|
|
2012-03-20 20:53:09 +00:00
|
|
|
|
If you want to develop on the 1.x branch, this should be unnecessary.
|
|
|
|
|
|
2009-10-31 21:35:25 +00:00
|
|
|
|
## License
|
|
|
|
|
|
2012-01-13 00:10:32 +00:00
|
|
|
|
Source Copyright © 2009-2012 Phil Hagelberg, Alex Osborne, Dan Larkin, and
|
2012-03-03 00:20:12 +00:00
|
|
|
|
[contributors](https://github.com/technomancy/leiningen/contributors).
|
2011-07-20 02:04:15 +00:00
|
|
|
|
Distributed under the Eclipse Public License, the same as Clojure
|
|
|
|
|
uses. See the file COPYING.
|
2009-10-31 21:35:25 +00:00
|
|
|
|
|
2009-11-06 04:36:27 +00:00
|
|
|
|
Thanks to Stuart Halloway for Lancet and Tim Dysinger for convincing
|
|
|
|
|
me that good builds are important.
|
|
|
|
|
|
2011-07-20 02:04:15 +00:00
|
|
|
|
Images Copyright © 2010 Phil Hagelberg. Distributed under the Creative
|
|
|
|
|
Commons Attribution + ShareAlike
|
|
|
|
|
License. [Full-size version](https://github.com/downloads/technomancy/leiningen/leiningen-full.jpg)
|
|
|
|
|
available.
|