Минимизация размеров зависимости jar - PullRequest
12 голосов
/ 29 сентября 2010

приложение, которое я написал, использует несколько сторонних фляг. Иногда используется только небольшая часть всей банки от 50 кБ до 1,7 мБ - один или два вызова функций или классов.

Какой самый лучший способ уменьшить размеры банок. Должен ли я скачать исходники и собрать банку только с теми классами, которые мне нужны? Какие существующие инструменты могут помочь автоматизировать это (например, я кратко посмотрел на http://code.google.com/p/jarjar/)?

Спасибо

Редактировать 1: Я хотел бы уменьшить размер моих «официальных» банок сторонних производителей, таких как swingx-1.6.jar (1,4 МБ), set-3.6 (1,7 МБ), glazedlists-1.8.jar (820 КБ) и т. Д., Чтобы они содержали минимальные классы мне нужно

Редактировать 2: Свернуть банку вручную или с помощью программы, подобной proguard, еще сложнее, если библиотека использует отражение. Инъекция с Google Guice больше не работает после запутывания с Proguard

Ответ cletus на другой пост очень хороший Как определить, какие классы используются Java-программой?

Ответы [ 3 ]

5 голосов
/ 29 сентября 2010

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

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

0 голосов
/ 29 сентября 2010

Вы можете добавить GenJar в качестве задачи Ant и использовать его для создания JAR. Как говорится на домашней странице библиотеки,

GenJar - это специальная задача Ant, создает файлы JAR на основе класса зависимости, а не просто содержимое каталога.

Вы можете найти его на SourceForge .

0 голосов
/ 29 сентября 2010

Прежде всего, если вы используете только один класс из файла JAR, это не означает, что этот класс не использует другие классы из этого JAR.Если вы используете JAR-файлы с открытым исходным кодом, вы можете получить исходники этого JAR-файла, прикрепить их к своему проекту, удалить ненужные файлы и самостоятельно внести изменения.

...