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 をフェッチしていますか?

この質問をする別の方法は、次のようなライブラリ用のスタンドアロン jar を構築する必要があるかどうかです。

util "1.0.7-SNAPSHOT"

それらを使用するためにメインアプリケーションが必要ですか?

4

2 に答える 2

2

lein jarではなく、によって生成された jar をデプロイする必要がありlein uberjarます。また、すべての適切なライブラリがこの方法でデプロイされることを安全に期待できます。

これは、おおよそ次の理由によるものです。

  1. 適切に準備された jar には依存関係に関するメタデータが含まれているため、ユーザーは jar と共に依存関係をフェッチする必要があることがわかります。

  2. プロジェクトでは、共通の依存関係を共有する複数のライブラリを使用することがよくあります。共有されている各依存関係を複数の jar に複製するのは無駄です。

  3. ユーザーには、依存関係の選択の一部をオーバーライドする正当な理由がある場合があります (偶然にも常に発生します。推移的な依存関係を別のバージョンに置き換えるか、推移的な依存関係を除外するのが一般的です)。とても簡単ですが、uberjar の場合は面倒です。

もちろん、依存関係のいくつかの座標がたまたま überjars を指している場合、それが Leiningen によって引き込まれることになります。ただし、そのように誤ってデプロイされたライブラリに遭遇したことはありません。

于 2013-04-12T09:18:07.650 に答える
0

lein uberjar を実行したくない場合、2 番目の質問に対する答えは「はい」です。これらの jar は、メイン アプリケーションを実行するクラス パスで使用できる必要があります。の仕事はlein uberjar、すべての依存関係と依存関係の依存関係などを含めることです。

于 2013-04-11T23:17:37.060 に答える