Уменьшить размер внешнего файла JAR - PullRequest
8 голосов
/ 09 апреля 2010

Я разработал модуль для проекта Java. Модуль зависит от внешней библиотеки (fastutil). Проблема в том, что файл fastutil.jar в несколько раз тяжелее самого проекта (14 МБ). Я использую только небольшое подмножество классов из библиотеки. Модуль сейчас закончен, и никто не будет расширять его в будущем. Есть ли способ, которым я мог бы извлечь только соответствующий класс для некоторых fastutil_small.jar, чтобы другие не загружали весь этот дополнительный вес?

Ответы [ 4 ]

8 голосов
/ 09 апреля 2010

Инструменты запутывания, такие как ProGuard , обычно предоставляют функцию удаления неиспользуемых классов (и даже полей и методов) из файла JAR. Вы должны быть осторожны, чтобы убедиться, что все по-прежнему работает », потому что вы можете использовать рефлекон для доступа к классам или методам, которые ProGuard не может анализировать.

Вы можете использовать только эту функцию и уже довольно сэкономить

Или вы можете комбинировать его с другими экономящими место методами запутывания (такими как переименование классов и методов), чтобы сэкономить еще больше места за счет более сложной отладки (ваши стековые следы станут сложнее анализировать).

5 голосов
/ 09 апреля 2010

Из инструкции по установке из fastutil:

Обратите внимание, что файл jar огромен из-за большого количества классов: если вы планируете поставлять свой собственный jar с некоторыми включенными классами fastutil, вам следует посмотреть на AutoJar (также доступно на JPackage) автоматически извлекать необходимые классы.

2 голосов
/ 09 апреля 2010

Поскольку fastutil является программным обеспечением LGPL с открытым исходным кодом, вы можете просто скопировать соответствующие исходные файлы в свой проект и удалить этот файл jar. Затем компилятор сообщит вам, есть ли у вас все необходимые файлы. Просто оставьте пакеты такими, какие они есть, и поместите копию файла лицензии fastutil поверх.

0 голосов
/ 09 апреля 2010

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

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