Исключить неиспользуемые части зависимостей из jar (Maven)

У нас есть небольшой проект с некоторыми тяжелыми зависимостями (например, Spring), из которых мы используем только небольшие части. Поэтому JAR, который мы получаем при упаковке со всеми зависимостями, весит несколько мегабайт, даже для нашего двухклассного сервера. Это кажется ненужным.

Есть ли способ ограничить сборку JAR фактически используемыми (классовыми) файлами?


person Raphael    schedule 05.08.2011    source источник


Ответы (2)


Вы можете использовать maven-shade-plugin для создания Jar-with- зависимостей (ваш проект и зависимости объединены в одну большую банку), ограничивая при этом классы или пакеты, которые добавляются в эту банку. Для справки см. включает/исключает страницу.

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

person Sean Patrick Floyd    schedule 05.08.2011
comment
Я нашел много полезных ссылок на сайте ProGuard, спасибо! Даже если Maven не может сделать это автоматически (позор), кажется, есть надежда с другими инструментами. - person Raphael; 06.08.2011
comment
Плагин maven Shade теперь позволяет автоматическую фильтрацию через конфигурацию <minimizeJar>true</minimizeJar> - person harschware; 02.03.2015
comment
Я только что попробовал это в проекте, и он сократил размер моей банки на 36%, никаких дополнительных настроек не требуется. - person harschware; 02.03.2015
comment
<minimizeJar>true</minimizeJar> уменьшил размер моего JAR-файла более чем на 50%, но в то же время он также уменьшил функциональность JAR-файла до 0, выбросив необходимые классы. Думаю, мне придется пойти с ручным исключением пакетов ... Кстати, я не очень разочарован, потому что, проработав разработчиком почти десять лет, вы просто предвидите эти вещи ;-) - person zepp133; 17.04.2018

Невозможно включить только используемые классы. Но вы можете исключить зависимости из ваших зависимостей чтобы уменьшить размер JAR. Единственный недостаток: нужно знать, что можно исключать, а что нет.

person Joachim Rohde    schedule 05.08.2011