【发布时间】:2015-01-29 11:12:57
【问题描述】:
在使用leiningen构建Clojure应用程序时,使用lein uberjar时如何排除某些依赖项不包含在JAR文件中?
【问题讨论】:
在使用leiningen构建Clojure应用程序时,使用lein uberjar时如何排除某些依赖项不包含在JAR文件中?
【问题讨论】:
使用 provided 条目作为 leiningen 配置文件。
: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 文件在外部提供。
【讨论】:
类似于 Guillermo 建议修改项目的 :profiles 以包含以下内容:
: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
【讨论】:
在 :dependencies 下的 project.clj 中,您可以为特定 jar 添加排除项,如下所示:
[test/test-jar "1.0" :exclusions [sample-exclusion/test-exclusions]]
【讨论】: