使用leiningen构建Clojure应用程序时,在使用lein uberjar
时,如何排除某些依赖项被包含在JAR文件中?
答案 0 :(得分:4)
使用leiningen个人资料的provided
条目。
: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"]]}}
一个常见的用例是bouncycastle
,需要从签名的JAR中排除,并在运行时使用自己的jar文件在外部提供。
答案 1 :(得分:3)
类似于吉列尔莫建议修改项目的内容:配置文件包括以下内容:
:provided {:dependencies [[org.bouncycastle/bcprov-jdk15on "1.50"]
[org.bouncycastle/bcpg-jdk15on "1.50"]]}
(具体版本可能会有所不同。)
麻烦的是,如果你使用Clojure包装器库(例如clj-pgp
或thi.ng/crypto
),它会强制将jar包含在uberjar中,从而破坏了这个过程。
我的解决方案是在修改其project.clj
以使用提供的依赖项之后对库进行分叉并将其推送到clojars。
此处有更多详情:http://side-effects-bang.blogspot.com/2015/02/deploying-uberjars-that-use-bouncy.html
答案 2 :(得分:0)
在project.clj
下的:dependencies
中,您可以为特定的jar添加排除项,如下所示:
[test/test-jar "1.0" :exclusions [sample-exclusion/test-exclusions]]