Уменьшить размер внешнего файла jar

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

4 ответов


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

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

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


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

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


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


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