Я разработал модуль для проекта Java. Модуль зависит от внешней библиотеки (fastutil
). Проблема, fastutil.jar
файл пару раз более тяжел, чем сам целый проект (14 МБ). Я только использую крошечное подмножество классов из библиотеки. Модуль теперь закончен, и никто, вероятно, не расширит его в будущем. Есть ли способ, которым я мог извлечь только соответствующий класс некоторым fastutil_small.jar
так, чтобы другие не загружали весь этот дополнительный вес?
Инструменты обфускации, такие как ProGuard, обычно предоставляют функцию удаления неиспользуемых классов (и даже полей и методов) из jar-файла. Однако вам нужно быть внимательным и проверять, что все работает, потому что вы можете использовать reflecton для доступа к классам или методам, которые ProGuard не может проанализировать.
Вы можете использовать только эту функцию и уже получить некоторую экономию
Или вы можете комбинировать ее с другими техниками обфускации (такими как переименование классов и методов), чтобы сэкономить еще больше места ценой более трудной отладки (ваши трассировки стека будет труднее разобрать).
Из инструкций по установке fastutil:
Обратите внимание, что файл jar огромен из-за большого количества классов: если вы планируете поставлять свой собственный jar с некоторыми включенными классами fastutil, вам следует посмотреть AutoJar (также доступен на JPackage) для автоматического извлечения необходимых классов.
Да, один грубый способ - иметь резервную копию вашего оригинального jar. затем удалить все неиспользуемые файлы классов из jar. и там могут быть некоторые внутренние ссылки на другие классы, которые вы можете добавить, когда это потребуется. т.е. во время выполнения может возникнуть исключение class not found, тогда вы можете добавить этот класс из оригинального jar в этот jar.
Поскольку fastutil - это программа с открытым исходным кодом под LGPL, вы можете просто скопировать соответствующие исходные файлы в свой проект и бросить туда jar-файл. Компилятор сообщит вам, есть ли у вас все необходимые файлы. Просто сохраните пакеты как они есть и положите сверху копию файла лицензии fastutil.