2012-05-24 04:27:17 +00:00
|
|
|
|
# FAQ
|
|
|
|
|
|
2013-02-21 18:18:54 +00:00
|
|
|
|
**Q:** How do you pronounce Leiningen?
|
2012-05-24 04:27:17 +00:00
|
|
|
|
**A:** It's LINE-ing-en. ['laɪnɪŋən]
|
|
|
|
|
|
2013-02-21 18:18:54 +00:00
|
|
|
|
**Q:** What's a group ID? How do snapshots work?
|
2012-05-24 04:27:17 +00:00
|
|
|
|
**A:** See the
|
2013-02-12 01:19:20 +00:00
|
|
|
|
[tutorial](https://github.com/technomancy/leiningen/blob/stable/doc/TUTORIAL.md)
|
2012-05-24 04:27:17 +00:00
|
|
|
|
for background.
|
|
|
|
|
|
2013-02-21 18:18:54 +00:00
|
|
|
|
**Q:** How should I pick my version numbers?
|
2012-05-24 04:27:17 +00:00
|
|
|
|
**A:** Use [semantic versioning](http://semver.org).
|
|
|
|
|
|
2013-02-21 18:18:54 +00:00
|
|
|
|
**Q:** What if my project depends on jars that aren't in any repository?
|
2013-05-12 21:11:24 +00:00
|
|
|
|
**A:** You will need to get them in a repository. The
|
2013-02-12 01:19:20 +00:00
|
|
|
|
[deploy guide](https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md)
|
2012-12-14 22:45:30 +00:00
|
|
|
|
explains how to set up a private repository. In general it's easiest
|
2013-05-12 21:11:24 +00:00
|
|
|
|
to deploy them to a static HTTP server or a private S3 bucket with the
|
2012-12-14 22:45:30 +00:00
|
|
|
|
[s3-wagon-private](https://github.com/technomancy/s3-wagon-private)
|
2013-05-12 21:11:24 +00:00
|
|
|
|
plugin. Once the repo is set up, `lein deploy private-repo com.mycorp/somejar
|
|
|
|
|
1.0.0 somejar.jar pom.xml` will push the artifacts out. If you don't
|
|
|
|
|
have a pom, you can create a dummy project with `lein new` and
|
|
|
|
|
generate a pom from that. If you are just doing exploratory coding
|
|
|
|
|
you can deploy to `file:///$HOME/.m2/repository` and the jars will
|
|
|
|
|
be available locally.
|
2012-05-24 04:27:17 +00:00
|
|
|
|
|
2013-02-21 18:18:54 +00:00
|
|
|
|
**Q:** I want to hack two projects in parallel, but it's annoying to switch between them.
|
|
|
|
|
**A:** Leiningen provides a feature called *checkout dependencies*.
|
|
|
|
|
See the
|
|
|
|
|
[tutorial](https://github.com/technomancy/leiningen/blob/stable/doc/TUTORIAL.md)
|
2012-10-10 18:16:16 +00:00
|
|
|
|
to learn more.
|
2012-05-24 04:27:17 +00:00
|
|
|
|
|
2013-02-21 18:18:54 +00:00
|
|
|
|
**Q:** Is it possible to exclude indirect dependencies?
|
2012-05-24 04:27:17 +00:00
|
|
|
|
**A:** Yes. Some libraries, such as log4j, depend on projects that are
|
|
|
|
|
not included in public repositories and unnecessary for basic
|
2013-02-12 01:19:20 +00:00
|
|
|
|
functionality. Projects listed as `:dependencies` may exclude
|
2012-05-24 04:27:17 +00:00
|
|
|
|
any of their dependencies by using the `:exclusions` key. See
|
|
|
|
|
`lein help sample` for details.
|
|
|
|
|
|
2013-02-21 18:18:54 +00:00
|
|
|
|
**Q:** Why doesn't `deps` task populate the `lib` directory in version 2?
|
2012-05-24 04:27:17 +00:00
|
|
|
|
**A:** The only reason version 1 copied the jars around in the first
|
|
|
|
|
place was to support existing tooling that needed a cheap way to
|
|
|
|
|
calculate a project's classpath. Now that Leiningen has a mature
|
|
|
|
|
plugin ecosystem, this is no longer needed; jars can be referenced
|
|
|
|
|
directly out of the `~/.m2/repository` directory. If you need to see
|
|
|
|
|
a listing of all the dependencies that will be used and their
|
2012-12-14 22:45:30 +00:00
|
|
|
|
versions, use `lein deps :tree`. To get the classpath use `lein classpath`.
|
2012-05-24 04:27:17 +00:00
|
|
|
|
|
2013-02-21 18:18:54 +00:00
|
|
|
|
**Q:** I specified a dependency on version X but am getting version Y; what's up?
|
2012-05-28 05:00:21 +00:00
|
|
|
|
**A:** One of your dependencies' dependencies has declared a
|
|
|
|
|
dependency on a hard version range, which overrides your "soft"
|
2013-05-30 03:38:50 +00:00
|
|
|
|
declaration. Running `lein deps :tree` will identify which of your
|
|
|
|
|
dependencies are responsible for the version range. You can add an
|
|
|
|
|
`:exclusions` clause to prevent that from affecting the rest of your
|
|
|
|
|
dependencies. See `lein help sample` for how exclusions work. You
|
|
|
|
|
may also want to report a bug with the dependency that uses hard
|
|
|
|
|
version ranges as they cause all kinds of problems and exhibit
|
|
|
|
|
unintuitive behaviour.
|
2012-05-28 05:00:21 +00:00
|
|
|
|
|
2013-02-21 18:18:54 +00:00
|
|
|
|
**Q:** I'm behind an HTTP proxy; how can I fetch my dependencies?
|
2012-07-27 09:50:33 +00:00
|
|
|
|
**A:** Set the `$http_proxy` environment variable in Leiningen 2.x. You can also
|
2012-07-27 09:54:30 +00:00
|
|
|
|
set `$http_no_proxy` for a list of hosts that should be reached directly, bypassing
|
2012-07-27 09:55:20 +00:00
|
|
|
|
the proxy. This is a list of patterns separated by `|` and may start or end with
|
2012-07-27 09:54:30 +00:00
|
|
|
|
a `*` for wildcard, e.g. `localhost|*.mydomain.com`.
|
2012-05-24 04:27:17 +00:00
|
|
|
|
For Leiningen 1.x versions, see the instructions for
|
|
|
|
|
[configuring a Maven proxy](http://maven.apache.org/guides/mini/guide-proxies.html)
|
|
|
|
|
using `~/.m2/settings.xml`.
|
|
|
|
|
|
2013-02-21 18:18:54 +00:00
|
|
|
|
**Q:** What can be done to speed up launch?
|
|
|
|
|
**A:** The main delay involved in Leiningen comes from starting two
|
|
|
|
|
JVMs: one for your project and one for Leiningen itself. Most people
|
|
|
|
|
use a development cycle that involves keeping a single project REPL
|
|
|
|
|
process running for as long as they're working on that project.
|
|
|
|
|
Depending on your editor you may be able to do this via its Clojure
|
|
|
|
|
integration. (See [nrepl.el](https://github.com/kingtim/nrepl.el) or
|
|
|
|
|
[foreplay](https://github.com/tpope/vim-foreplay), for example.)
|
|
|
|
|
Otherwise you can use the basic `lein repl`.
|
2012-05-24 04:27:17 +00:00
|
|
|
|
|
2013-02-21 18:18:54 +00:00
|
|
|
|
**Q:** Still too slow; what else can make startup faster?
|
|
|
|
|
**A:** The wiki has a page covering
|
|
|
|
|
[ways to improve startup time](https://github.com/technomancy/leiningen/wiki/Faster).
|
2013-01-19 01:18:31 +00:00
|
|
|
|
|
2013-07-28 19:51:32 +00:00
|
|
|
|
**Q:** What if I care more about long-term performance than startup time?
|
2013-06-20 07:08:34 +00:00
|
|
|
|
**A:** Leiningen 2.1.0 onward get a speed boost by disabling optimized
|
|
|
|
|
compilation (which only benefits long-running processes). This can
|
|
|
|
|
negatively affect performance in the long run, or lead to inaccurate
|
|
|
|
|
benchmarking results. If want the JVM to fully optimize, you can follow
|
|
|
|
|
the instructions on the Wiki page covering
|
|
|
|
|
[performance](https://github.com/technomancy/leiningen/wiki/Faster).
|
|
|
|
|
|
2013-03-28 18:00:27 +00:00
|
|
|
|
**Q:** What does "Unrecognized VM option 'TieredStopAtLevel=1'" mean?
|
|
|
|
|
**A:** Old versions of the JVM do not support the directives Leiningen
|
|
|
|
|
uses for tiered compilation which allow the JVM to boot more
|
|
|
|
|
quickly. You can disable this behaviour with `export LEIN_JVM_OPTS=`
|
|
|
|
|
or upgrade your JVM to something more recent. (newer than b25 of Java 6)
|
2013-05-30 03:38:50 +00:00
|
|
|
|
|
|
|
|
|
**Q:** What are the downsides of Tiered Compilation?
|
|
|
|
|
**A:** Tiered Compilation sacrifices long-term JIT performance for
|
|
|
|
|
improved boot time. Most uses of Leiningen are in a context where
|
|
|
|
|
fast boot is more important, but in cases where this isn't the case
|
|
|
|
|
you can switch profiles (`lein with-profiles production run ...`) to
|
|
|
|
|
prevent the Tiered Compilation `:jvm-opts` setting from being used.
|
2013-06-26 11:53:28 +00:00
|
|
|
|
|
|
|
|
|
**Q:** I'm attempting to run a project as a background process (`lein run &`),
|
|
|
|
|
but the process suspends until it is in the foreground. How do I run a program
|
2013-06-26 11:55:05 +00:00
|
|
|
|
in the background?
|
2013-06-26 11:53:28 +00:00
|
|
|
|
**A:** For long-lasting processes, use `lein trampoline run &` or consider to
|
2013-06-26 11:55:05 +00:00
|
|
|
|
(uber)jar the program. For short-lived ones, both `lein run <&- &` and
|
|
|
|
|
`bash -c "lein run &"` will work fine.
|
2013-08-20 19:28:28 +00:00
|
|
|
|
|
|
|
|
|
**Q:** I need to do AOT for an uberjar; can I avoid it during development?
|
|
|
|
|
**A:** A reasonable request. Leiningen supports isolating different
|
|
|
|
|
profiles by their target directory. Simply specify `:target-path
|
|
|
|
|
"target/%s"` in order to have each profile set use a different
|
|
|
|
|
directory for generated files. Then you can put your `:aot`
|
|
|
|
|
settings in the `:uberjar` profiles, and the .class files created
|
|
|
|
|
from the AOT process will not affect normal development use. You can
|
|
|
|
|
specify the profile-isolated `:target-path` in your `:user` profile if
|
|
|
|
|
you want it applied across all the projects you work on.
|