При использовании leiningen для создания приложений Clojure, как можно исключить определенные зависимости из включения в файл JAR при использовании lein uberjar?

5
pmf 1 Дек 2014 в 15:34

3 ответа

Лучший ответ

Используйте запись provided для профиля leiningen.

 :profiles {:dev {:dependencies [[ring-mock "0.1.5"]
                                 [prismatic/dommy "0.1.3"]
                                 [org.bouncycastle/bcprov-jdk15on "1.50"]]}
            :provided {:dependencies [[org.bouncycastle/bcprov-jdk15on "1.50"]]}}

Один из распространенных вариантов использования - это bouncycastle, который необходимо исключить из подписанного JAR и предоставить извне с использованием собственного файла jar во время выполнения.

4
guilespi 1 Дек 2014 в 12:44

Подобно тому, что Гильермо предложил изменить профили вашего проекта:, чтобы включить что-то вроде:

:provided {:dependencies [[org.bouncycastle/bcprov-jdk15on "1.50"]
                          [org.bouncycastle/bcpg-jdk15on "1.50"]]}

(Конкретные версии могут отличаться.)

Проблема в том, что если вы используете библиотеку-оболочку Clojure (такую ​​как clj-pgp или thi.ng/crypto), она принудительно включает jar-файл в uberjar, нарушая процесс.

Мое решение заключалось в том, чтобы разветвить библиотеку и отправить ее в клояры после изменения ее project.clj для использования предоставленных зависимостей.

Подробнее здесь: http: // side-effects-bang.blogspot.com/2015/02/deploying-uberjars-that-use-bouncy.html

4
Tianxiang Xiong 15 Дек 2018 в 08:32

В project.clj под :dependencies вы можете добавить исключения для определенных jar-файлов, например:

[test/test-jar "1.0" :exclusions [sample-exclusion/test-exclusions]]

0
Sandeep Sarkar 20 Фев 2020 в 11:13