Есть ли какой-нибудь инструмент, который перечисляет, какие и когда некоторые классы эффективно используются приложением или, что еще лучше, автоматически обрезает библиотеки JAR, чтобы предоставлять только классы, на которые ссылаются и которые используются?
4 ответа
Помните, что, как показывает проблема остановки, вы не можете однозначно сказать, что конкретная класс используется или не используется. По крайней мере, в любом умеренно сложном приложении. Это потому, что классы не просто привязываются во время компиляции, но могут быть загружены:
- на основе конфигурации XML (например, Spring);
- загружается из файлов свойств (например, имени драйвера JDBC);
- добавляется динамически с аннотациями;
- загружается в результате внешнего ввода (например, пользовательского ввода, данных из базы данных или удаленного вызова процедуры);
- и т.п.
Так что просто взглянуть на исходный код недостаточно. При этом любая разумная IDE предоставит вам инструменты анализа зависимостей. IntelliJ, безусловно, делает.
Что вам действительно нужно, так это инструментирование времени выполнения того, что делает ваше приложение, но даже это не гарантируется. В конце концов, конкретный путь кода может возникать один раз из 10 миллионов запусков из-за странной комбинации входных данных, поэтому вы не можете гарантировать, что вас охватят.
Тем не менее, подобные инструменты имеют определенную ценность. Вы можете посмотреть что-нибудь вроде Эммы. Профилировщики, такие как Yourkit, могут предоставить вам дамп кода, который вы тоже можете проанализировать (хотя это не поможет до преходящих объектов ужасно хорошо).
Лично я считаю, что помимо того, что IDE вам скажет, мало пользы: удаление неиспользуемых JAR-файлов. Более детальный подход - это просто напрашиваться на неприятности с минимальной или нулевой выгодой.
Да, вам нужен ProGuard. Это полностью бесплатный инструмент для сжатия и обфускации кода Java. Настроить легко, быстро и эффективно.
Вы можете попробовать JarJar http://code.google.com/p/jarjar/
Он обрезает зависимости jar.
В большинстве случаев вы можете сделать это довольно легко, используя только javac.
Удалите существующие файлы классов. Вызовите javac с именем ваших входных классов. Он скомпилирует необходимые классы, но не более того. Работа сделана.
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].