#build #clojure #jar #leiningen
#сборка #clojure #jar #leiningen
Вопрос:
Мы пытаемся создать наш проект Clojure с помощью Leiningen. Нам удалось создать uberjar, выполнив следующее:
предварительные условия:
- в файле project.clj перечислены зависимости
:main my-project.core
в project.clj- файл core.clj с
-main
функцией (:gen-class :main true)
в core.clj
процедура:
- запуск
lein test
; завершен без сбоев - запуск
lein deps
; успешно завершен - из каталога project.clj: rain
lein uberjar
- Это создало два файла jar: My-Project-1.0.0-SNAPSHOT-standalone.jar , и My-Project-1.0.0-SNAPSHOT.jar .
- запускался
java -jar BioClojure-1.0.0-SNAPSHOT-standalone.jar
, что привело к этому исключению:
Исключение в потоке «main» java.lang.Исключение SecurityException: недопустимый дайджест файла подписи для основных атрибутов манифеста
Мои исследования этой проблемы не были плодотворными. По-видимому, это известная проблема, не имеющая хорошего решения. Я не понимаю ответов там.
Что нам нужно сделать, чтобы наш uberjar заработал?
- определите, какая из наших зависимостей вызывает проблему?
- удалить зависимости из нашего проекта?
- скомпилируйте проект другим способом?
- исправить лейнинген?
- используйте предложенную команду:
zip *-standalone.jar -d META-INF/DUMMY.SF
(я понятия не имею, что это делает) - что-то сделать с
:uberjar-exclusions
файлом project.clj? (если да, то что?)
Версии Lein и java:
$ lein version
Leiningen 1.6.1 on Java 1.6.0_26 Java HotSpot(TM) 64-Bit Server VM
Обновление: выполнение предложенной команды дает:
$ unzip -l BioClojure-1.0.0-SNAPSHOT-standalone.jar | grep -i -e ".sf"
49911 08-27-09 15:57 META-INF/RCSB-PDB.SF
0 03-23-10 08:21 META-INF/maven/net.sf.alxa/
0 03-23-10 08:21 META-INF/maven/net.sf.alxa/jlatexmath/
929 03-23-10 08:20 META-INF/maven/net.sf.alxa/jlatexmath/pom.xml
115 03-21-10 14:01 META-INF/maven/net.sf.alxa/jlatexmath/pom.properties
175241 08-17-11 20:25 META-INF/SELFSIGN.SF
0 09-21-09 06:45 META-INF/maven/net.sf.opencsv/
0 09-21-09 06:45 META-INF/maven/net.sf.opencsv/opencsv/
5510 09-21-09 06:44 META-INF/maven/net.sf.opencsv/opencsv/pom.xml
106 09-21-09 06:45 META-INF/maven/net.sf.opencsv/opencsv/pom.properties
Ответ №1:
Насколько я понял из прочтения комментариев в этом выпуске, ваша проблема исчезнет, если вы добавите следующее в свой project.clj
:uberjar-exclusions [#"foo.sf"]
где foo.sf
находится конкретный файл .sf, который вы хотите игнорировать из jar. Вы можете определить это, выполнив:
unzip -l BioClojure-1.0.0-SNAPSHOT-standalone.jar | grep -i -e ".sf"
Предлагаемая zip
команда удаляет конкретный файл из jar (который имеет формат ZIP).
Комментарии:
1. @MattFenwick Я полагаю, что вы хотите исключить
RCSB-PDB.SF
иSELFSIGN.SF
только.