1

我正在使用 lein 2.0

如果一个主应用

(defproject rexfer "1.0.1-SNAPSHOT"
  :description "Filters standard report from Patriot Properties' AssessPro."
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [org.clojure/tools.cli "0.2.2"]
                 [org.clojure/data.csv "0.1.2"]
                 [rexfer-csv "1.0.0-SNAPSHOT"]
                 [util "1.0.7-SNAPSHOT"]]

  :omit-source true
  :main rexfer.core)

依赖于一个库(util 1.07-SNAPSHOT)

(defproject util "1.0.7-SNAPSHOT"
  :description "A general purpose Clojure library"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [clojure-csv/clojure-csv "1.3.2"]
                 [org.clojure/data.csv "0.1.2"]]
  :aot [util.core]
  :omit-source true)

引用是获取 .jar 文件还是独立的 .jar?

问这个问题的另一种方法是我应该为像这样的库构建独立的 jars

util "1.0.7-SNAPSHOT"

需要一个主应用程序才能使用它们?

4

2 回答 2

2

您应该部署由lein jar而不是生成的 jar lein uberjar。您也可以放心地期望以这种方式部署所有合理的库。

这大致是因为以下几点:

  1. 正确准备的 jar 包含有关其依赖项的元数据,因此用户将知道与您的 jar 一起获取依赖项;

  2. 经常会发生一个项目使用多个共享公共依赖项的库——将每个共享依赖项复制到几个 jar 中会很浪费;

  3. 用户可能有充分的理由覆盖您的某些依赖项选择(顺便说一句,这种情况一直在发生;用不同的版本替换传递依赖项或排除传递依赖项很常见)——使用常规 jar,他们将能够做到如此容易,而使用 überjar 会很痛苦。

当然,如果您的某些依赖项的坐标确实恰好指向 überjars,那么这就是 Leiningen 最终会拉入的内容。不过,我从来没有遇到过这样错误部署的库。

于 2013-04-12T09:18:07.650 回答
0

如果您不想运行 lein uberjar 那么第二个问题的答案是肯定的。这些 jars 需要在类路径上可用,以便主应用程序运行。的工作lein uberjar是包含所有依赖项和依赖项的依赖项等。

于 2013-04-11T23:17:37.060 回答