Есть proguard , с плагинами ant и maven. Удаляет неиспользуемый код, по выбору запутывает и сжимает в одну банку.
Proguard уменьшает размер на два фронта
- только классы, которые фактически используются, сохраняются в последнем фляге.
- Длинные имена, например все длинные имена пакетов, имена классов, переименовываются в более короткие имена, экономя немного места.
Определить, используется ли класс в Java, немного сложно. Статический анализ кода может помочь вам продвинуться далеко вперед, но вам нужно быть немного осторожным при обращении к коду с помощью рефлексии, так как инструмент может не обнаружить этого. Он обрабатывает Class.forName ("xyzFoo"), но ничего более сложного, и вам нужно будет добавить его в файл конфигурации классов, чтобы включить. Возможно, загрузчик классов сгенерирует список классов, которые используются во время выполнения, поэтому это не должно быть трудным.
Возможно, вы захотите изучить схему сжатия pack200 , так как это также может привести к значительному уменьшению размера банки.