Всякий раз, когда упаковка (uberjar, war) создает большой файл, содержит файлы .class и структуру каталогов. Где загружаются эти файлы XML (класс)? Вы можете экспериментировать с упаковкой вручную. В конце концов, это (или uberjar, war or jar) - всего лишь zip-файл.
Когда вы точно знаете макет, который вам нужен, SBT достаточно гибкий, чтобы вы могли упаковать из множества входных файлов jar. К сожалению, плагины lein будут делать такие вещи, как всегда, перезаписывать дубликаты, и вы не можете контролировать поведение упаковки. Я не могу точно помнить о гибкости, но я не мог контролировать, как прошел процесс упаковки, какие решения были приняты.
Для этого я использую Linux как-то под названием Archive Manager, который оказался намного лучше, чем тот, который я использовал в Windows. Выполнение этого вручную может быть всем, что вам нужно. Недостатком SBT, конечно, является то, что вы должны его изучить, в том числе немного Scala.
Он нуждается в разных дескрипторах XML, использующих одно и то же имя файла в разных JAR-файлах.
Просто подумав об этом, вам нужно добавить содержимое каждого файла, находящегося в другой банке, в один файл, который находится в uberjar? Вы можете попробовать. Если это работает, и вам нужно достаточно быстро упаковать пакеты, чтобы вручную создавать и переименовывать zip-файл каждый раз становилось болью, тогда я считаю, что SBT будет вашим лучшим выбором.
Я должен упаковать мой контейнер с исходным файлом банку, а затем ссылаться на эту банку в пути к классам при запуске приложения
загрузчик классов загружает классы, а не банки. Задача контейнера состоит в том, чтобы распаковать все, что вы ему даете, например, файлы .class, uber, jars, wars. Любая программа, которая динамически загружается из пути к классам, загружает либо классы, либо ресурсы (например, файлы .xml). Я предполагаю, что файл .jar может быть ресурсом, и в этом случае вы помещаете файл jar в uberjar. Таким образом, все еще можно упаковать его.
Убержар не зависит от языка. Таким образом, вы можете создать его с помощью кода Clojure, используя любой инструмент построения. Как правило, я предпочитаю лейн SBT, но для создания uberjars у меня был больше успеха с плагинами SBT, чем с плагинами lein. Например, в вашем случае https://github.com/marcuslonnberg/sbt-docker может вам помочь. –
@ChrisMurphy Спасибо за ваше предложение. Моя проблема в том, что библиотека, которую я использую, не работает при переупаковке в uber-jar. Я должен упаковать свой контейнер с исходным файлом jar, а затем ссылаться на эту банку в пути к классам при запуске приложения. Когда я делаю это вручную, это работает. Он также работает, когда я упаковываю с помощью docker-maven-plugin, поскольку этот плагин не переупаковывает банки. Проблема с maven заключается в том, что emacs/cider не поддерживает maven. –