Доставка одной банки с проектом Maven

Я хочу доставить один файл.jar своим клиентам, но мой проект в настоящее время построен с использованием Maven, и у меня есть несколько модулей, которые генерируют один файл.jar каждый.

Я знаю, что вложение различных файлов.jar не очень хорошая идея, поэтому я не уверен, как мне этого добиться.

Есть идеи?

4 ответа

Решение

Прежде всего, спросите себя, есть ли у вас действительно веская причина для упаковки вашего приложения и всех его зависимостей в одну банку. Я не нашел очень много веских причин для этого (большинство причин связано с глупостью организационной политики или просто невежеством). Нужно оставить библиотеки в своих собственных jar-файлах и предоставить файл.zip/.tar.gz, содержащий все ваши библиотеки и ваше приложение с

  1. Исполняемый файл.jar с соответствующей настройкой пути к классам в вашем файле MANFIEST.MF
  2. Сценарий.bat/.sh, который вызывает Java и создает соответствующий путь к классу на основе ваших дел

И наоборот, используйте JNLP (более известный как Java Web Start).

Если вы действительно хотите, чтобы maven связывал все ваши зависимости и ваше приложение под одним jar-файлом, вам нужно использовать предопределенную сборку "jar-with-dependencies". Страница использования подключаемого модуля сборки maven также показывает, как это можно сделать.

Если вы действительно хотите пойти по этому пути, есть несколько способов сделать это:

  • с плагином Maven Assembly и, возможно, jar-with-dependencies предопределенный дескриптор сборки (который распакует зависимости)
  • с плагином Maven Shade (похож на предыдущий, но дает больше гибкости)
  • с плагином Maven One-Jar (который использует One-JAR и его собственный загрузчик классов, чтобы разрешить вложение JAR)

В зависимости от ваших конкретных требований и ограничений, вы можете предпочесть одно или другое.

Вы также можете попробовать плагин Maven Shade. http://maven.apache.org/plugins/maven-shade-plugin/

Общие инструкции о том, как использовать плагин Shade, можно найти на странице использования. Некоторые более конкретные случаи использования описаны в приведенных ниже примерах. И последнее, но не менее важное: пользователи время от времени добавляют на вики-страницу плагина дополнительные примеры, советы или исправления.

Если у вас все еще есть вопросы, касающиеся использования плагина, пожалуйста, не стесняйтесь обращаться к списку рассылки пользователя. Сообщения в списке рассылки архивируются и могут уже содержать ответ на ваш вопрос как часть старой ветки. Следовательно, это также стоит просмотреть / поиск в почтовом архиве.

Если вы чувствуете, что в плагине отсутствует функция или имеется дефект, вы можете заполнить запрос функции или сообщить об ошибке в нашем трекере ошибок. При создании новой проблемы, пожалуйста, предоставьте исчерпывающее описание вашей проблемы. Особенно для исправления ошибок важно, чтобы разработчики могли воспроизвести вашу проблему. По этой причине очень ценятся целые журналы отладки, POM или, что более предпочтительно, небольшие демонстрационные проекты, связанные с проблемой. Конечно, патчи тоже приветствуются. Участники могут проверить проект из нашего исходного хранилища и найти дополнительную информацию в руководстве по оказанию помощи с Maven.

На самом деле, вложение файлов.jar невозможно. В банке не может быть других банок.

Файлы.war и.ear могут содержать файлы jar, и это хорошее решение, если вы поставляете приложение J2EE.

Если ваше приложение просто J2SE, я рекомендую посмотреть плагин Maven Assembly. Как видно из названия, он позволяет вам создать единый двоичный дистрибутив вашей сборки.

Другие вопросы по тегам