project.clj和依赖库jar文件之间的关系是什么?

时间:2013-04-11 21:01:30

标签: clojure leiningen

我正在使用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?

的引用

提出这个问题的另一种方法是我应该为像

这样的库构建独立的jar

util "1.0.7-SNAPSHOT"

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

2 个答案:

答案 0 :(得分:2)

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

这大致是因为以下原因:

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

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

  3. 用户可能有充分的理由覆盖您的一些依赖选择(这种情况一直发生,顺便说一下;用不同的版本替换传递依赖或者排除传递依赖是很常见的) - 使用常规的jar他们将能够轻松地做到这一点,而对于überjar来说会很痛苦。

  4. 当然,如果你的某些依赖关系的坐标恰好指向überjars,那最终会被Leiningen拉进去。我从来没有遇到像这样错误部署的图书馆。

答案 1 :(得分:0)

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