¿Cómo hago exclusiones para las dependencias que leiningen obtiene al escribir un complemento?

Estoy escribiendo un complemento personalizado para Leiningen que ayudará a implementar las funciones de AWS Lambda escritas en Clojure. Estoy usandoaws-java-sdk-lambda versión1.11.145 que depende de Jackson2.6.xespecíficamente2.6.5 IIRC.

Como estoy escribiendo esto como un complemento, el código se está ejecutando en el contexto de Leiningen (es decir,:eval-in-leiningen true) y, AFAIK, está sujeto a las dependencias de Leiningen.

Este es un problema ya que la versión de Leiningen que estoy ejecutando (2.7.1) depende de Cheshire5.5.0 que, a su vez, depende de Jackson2.5.3. Esto resulta en unNoSuchMethodError cuando el SDK de AWS intenta llamarcom.fasterxml.jackson.databind.JavaType.isReferenceType(). HASTA DONDE SE,jackson-core-2.6.5 (arrastrado por AWS) está intentando llamarjackson-databind-2.5.3 (tirado, indirectamente, por Cheshire). Al menos eso es lo que parece estar sucediendo.

Primera pregunta: ¿es un problema conocido? No pude encontrar nada directamente haciendo referencia a él en SO, Google o la primera página de problemas en la página GitHub de Leiningen (no hice una búsqueda exhaustiva allí). Segundo: ¿Alguien tiene alguna sugerencia para solucionar este problema?:exclusions parece ser la opción obvia, pero no estoy seguro de cómo se podría especificar una exclusión para algo que Leiningen está tomando como una dependencia.

A continuación, he incluido especificaciones de proyecto simples para reproducir el error:

pluginproject.clj:

(defproject aws-plugin "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[com.amazonaws/aws-java-sdk-lambda "1.11.145"]]
  :eval-in-leiningen true)

código fuente del complemento:

(ns leiningen.aws-plugin
  (:import (com.amazonaws.services.lambda AWSLambdaClient
                                          AWSLambdaClientBuilder)))

(def aws-lambda-client (-> (AWSLambdaClient/builder) (.build)))

(defn aws-plugin
  "I don't do a lot, or anything at all."
  [project &]
  (println "Create Lambda"))

usuario del complementoproject.clj

(defproject aws-plugin-user "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.8.0"]]
  :target-path "target/%s"
  :plugins [[aws-plugin "0.1.0-SNAPSHOT"]]
  :profiles {:uberjar {:aot :all}})

Una vez que esto esté configurado, ejecutelein install desde el directorio de complementos y luego ejecutarlein aws-plugin desde el directorio de usuarios del complemento. Esto debería intentar crear una instancia deAWSLambdaClient que, a su vez, activará el error.

Respuestas a la pregunta(1)

Su respuesta a la pregunta