1

で新しいプロジェクトを作成しました

lein new jar-clash-test
cd jar-clash-test/

私はproject.cljに以下を入れました

(defproject jar-clash-test "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.5.0"]
                 [io.pedestal/pedestal.service "0.1.2"]
                 ...]
  :main ^{:skip-aot true} jar-clash-test.core
)

以下を jar-clash-test/src/jar_clash_test/core.clj に入れました

(ns jar-clash-test.core
  (:require [io.pedestal.service.http :as bootstrap]))

これを実行すると

lein repl

次のエラーが表示されます。

CompilerException java.lang.RuntimeException: No such var: content-type/content-type-response, compiling:(io/pedestal/service/http/ring_middlewares.clj:46:3)

私が見たとき:

/.m2/repository/io/pedestal/pedestal/0.1.2/pedestal.service-0.1.2/io/ring_middlewares.clj

46 行目に次のように表示されます。

  (leave-interceptor ::content-type-interceptor content-type/content-type-response opts))

要件で次のように定義されています。

[ring.middleware.content-type :as content-type]

つまり、リングミドルウェア jar を取り込もうとしています。

私の仮説は、リング ミドルウェアの実装に jar バージョンの衝突があるというものです。

これは以下に基づいています。

  1. [compojure "1.1.3"] [依存関係があります] 2 on [ring/ring-core "1.1.5"]
  2. [io.pedestal/pedestal.service "0.1.2"] [依存関係あり] 3 [ring/ring-core "1.2.0-beta1"]

私が見たとき:

/.m2/repository/ring/ring-core/1.2.0-beta1/ring-core-1.2.0-beta1/ring/middleware/content_type.clj

関数

(defn content-type-response

存在します。私が見たとき:

/.m2/repository/ring/ring-core/1.1.5/ring-core-1.1.5/ring/middleware/content_type.clj

関数が存在しません。

私の質問は、lein がどのバージョンを取得したかをどのように知ることができるかということです。以前のものを拾ったと「推測」できますが、どうすれば確実に知ることができますか?

2 番目の質問は、どの lein が選択されるかをどのように保証できますか?

4

1 に答える 1