나는 내가 project.clj에 다음을 넣어 가지고Clojure의 lein 항아리 충돌 해결 절차
lein new jar-clash-test
cd jar-clash-test/
와 함께 새로운 프로젝트를 생성 한
나는 단지-충돌 테스트에서 다음을 뒀다(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
)
내가
이것을 실행(ns jar-clash-test.core
(:require [io.pedestal.service.http :as bootstrap]))
/src/jar_clash_test/core.clj
내가 볼 때CompilerException java.lang.RuntimeException: No such var: content-type/content-type-response, compiling:(io/pedestal/service/http/ring_middlewares.clj:46:3)
가 : 라인 (46)에
/.m2/repository/io/pedestal/pedestal/0.1.2/pedestal.service-0.1.2/io/ring_middlewares.clj
내가 볼 : 0
lein repl
나는 다음과 같은 오류가 요구 사항에 정의되어
(leave-interceptor ::content-type-interceptor content-type/content-type-response opts))
예 :
[ring.middleware.content-type :as content-type]
즉, 링 미들웨어 병을 가져 오려고합니다.
내 가설은 링 미들웨어 구현을위한 jar 버전 충돌이 있다는 것입니다.
- [compojure "1.1.3"] [갖는 의존성] 링/링 코어 "1.1.5"]에 2
- [io.pedestal/:
이
는에 기초 pedestal.service "0.1.2"는 [3 [링/링 코어 "1.2.0-β1"]에 종속
I은 보면 :
/.m2/repository/ring/ring-core/1.2.0-beta1/ring-core-1.2.0-beta1/ring/middleware/content_type.clj
,536,
기능이
(defn content-type-response
이 있습니다. 내가 볼 때 :
/.m2/repository/ring/ring-core/1.1.5/ring-core-1.1.5/ring/middleware/content_type.clj
기능이 존재하지 않습니다.
내 질문은 - 내가 어떤 버전의 픽업을 가져 왔는지 어떻게 알 수 있습니까? 나는 그것이 이전의 것을 집어 올렸다고 '추측'할 수있다 - 그러나 내가 어떻게 알 수 있을까?
나의 두 번째 질문은 - 내가 어떤 것을 고를지를 어떻게 보장 할 수 있는가?
어디에서 의존성이로드되는지 쉽고 빠르게 보려면'lein deps : tree'를 사용하십시오. –
필자는 특별히 요청한 버전이 아닌 간접적 인 종속성을 사용하는 버전을 사용하고 있습니다 (clojure 1.4를 요청했습니다. 종속성 중 하나는 1.3을 요구하고 1.3은 런타임에 사용됨). 특정 lib가 사용되도록 보장하는 신뢰할 수있는 유일한 방법은 유치원과 배타적 인 방법입니다 – noisesmith