pmf
pmf

Reputation: 7749

Leiningen: how to exclude dependencies when uberjaring?

When using leiningen to build Clojure applications, how can certain dependencies be excluded from being included in the JAR file when using lein uberjar?

Upvotes: 5

Views: 2265

Answers (3)

Sandeep Sarkar
Sandeep Sarkar

Reputation: 419

In the project.clj under :dependencies you can add exclusions for specific jars like this:

[test/test-jar "1.0" :exclusions [sample-exclusion/test-exclusions]]

Upvotes: 0

Marcin Bilski
Marcin Bilski

Reputation: 601

Similar to what Guillermo suggested modify your project's :profiles to include something along the lines of:

:provided {:dependencies [[org.bouncycastle/bcprov-jdk15on "1.50"]
                          [org.bouncycastle/bcpg-jdk15on "1.50"]]}

(The specific versions may vary.)

Trouble is that if you use a Clojure wrapper library (such as clj-pgp or thi.ng/crypto), it forces inclusion of the jar in the uberjar, breaking the process.

My solution was to fork the library and push it to clojars after modifying its project.clj to uses provided dependencies.

More details here: http://side-effects-bang.blogspot.com/2015/02/deploying-uberjars-that-use-bouncy.html

Upvotes: 4

guilespi
guilespi

Reputation: 4702

Use the provided entry for the leiningen profile.

 :profiles {:dev {:dependencies [[ring-mock "0.1.5"]
                                 [prismatic/dommy "0.1.3"]
                                 [org.bouncycastle/bcprov-jdk15on "1.50"]]}
            :provided {:dependencies [[org.bouncycastle/bcprov-jdk15on "1.50"]]}}

One common use case is bouncycastle that needs to be excluded from the signed JAR and provided externally using its own jar file in runtime.

Upvotes: 4

Related Questions