У Лейнингена проблемы со сборкой рабочего uberjar

#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 только.