хотя, и когда выйдет 2.8.0, у вас должно быть меньше проблем.
у собственный плагин для Leiningen, который поможет в развертывании функций AWS Lambda, написанных на Clojure. я используюaws-java-sdk-lambda
версия1.11.145
который зависит от Джексона2.6.x
конкретно2.6.5
IIRC.
Поскольку я пишу это как плагин, код выполняется в контексте Leiningen (т.е.:eval-in-leiningen true
) и, AFAIK, подчиняется зависимостям самого Leiningen.
Это проблема, так как версия Leiningen, которую я использую (2.7.1
) зависит от Чешира5.5.0
что, в свою очередь, зависит от Джексона2.5.3
, Это приводит кNoSuchMethodError
когда AWS SDK пытается позвонитьcom.fasterxml.jackson.databind.JavaType.isReferenceType()
, НАСКОЛЬКО МНЕ ИЗВЕСТНО,jackson-core-2.6.5
(привлечено AWS) пытается позвонить вjackson-databind-2.5.3
(втягивается, косвенно, Чеширом). По крайней мере, так и происходит.
Первый вопрос: это известная проблема? Я не смог найти ничего, что прямо ссылалось бы на это на SO, Google или на первой странице проблем на странице Leiningen's GitHub (я не делал там исчерпывающий поиск). Второе: есть ли у кого-нибудь предложения по решению этой проблемы?:exclusions
кажется очевидным выбором, но я не уверен, как можно указать исключение для чего-то, что сам Лейнинген использует как зависимость.
Ниже я включил простые спецификации проекта, чтобы воспроизвести ошибку:
плагинаproject.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)
Исходный код плагина:
(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"))
плагин пользователяproject.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}})
Как только это настроено, запуститеlein install
из каталога плагинов, а затем запуститеlein aws-plugin
из каталога пользователей плагина. Это должно попытаться создать экземплярAWSLambdaClient
что, в свою очередь, вызовет ошибку.