【问题标题】:Leiningen: how to exclude dependencies when uberjaring?Leiningen:如何在 uberjaring 时排除依赖关系?
【发布时间】:2015-01-29 11:12:57
【问题描述】:

在使用leiningen构建Clojure应用程序时,使用lein uberjar时如何排除某些依赖项不包含在JAR文件中?

【问题讨论】:

    标签: jar clojure leiningen


    【解决方案1】:

    使用 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 文件在外部提供。

    【讨论】:

      【解决方案2】:

      类似于 Guillermo 建议修改项目的 :profiles 以包含以下内容:

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

      (具体版本可能有所不同。)

      问题在于,如果您使用 Clojure 包装库(例如 clj-pgpthi.ng/crypto),它会强制将 jar 包含在 uberjar 中,从而中断进程。

      我的解决方案是在修改其project.clj 以使用提供的依赖项后分叉库并将其推送到 clojars。

      更多详情:http://side-effects-bang.blogspot.com/2015/02/deploying-uberjars-that-use-bouncy.html

      【讨论】:

        【解决方案3】:

        :dependencies 下的 project.clj 中,您可以为特定 jar 添加排除项,如下所示:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-27
          • 1970-01-01
          • 1970-01-01
          • 2016-01-10
          相关资源
          最近更新 更多