Определить неиспользованные банки по покрытию кода? - PullRequest
6 голосов
/ 10 ноября 2011

У меня есть проект с миллионом банок (ну, много). Они пришли ко мне от Maven, и я использую лишь небольшой набор функций. Ради чистоты мне было интересно с банками, без которых я мог бы обойтись.

Моей первой мыслью было запустить программу с помощью инструмента покрытия кода, а затем найти затронутые классы.

Кто-нибудь делал это раньше? Или есть более хитрые приемы для достижения того же самого?

Ответы [ 3 ]

4 голосов
/ 10 ноября 2011

Вы можете запустить проект, используя опцию -verbose:class VM. Это напечатает для всех загруженных классов, откуда они загружены. Использование некоторого интеллектуального приложения для разбора / grep / regexp позволит вам отфильтровать имена банок в набор уникальных записей и указать, какие из них используются.

Я думаю, что это будет проще, потому что он автоматически сообщит вам, если используется класс, и если да, то в каком банке.

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

Возможное предложение при использовании linux:

java -verbose:class <your startup command here> | grep "\[Loaded" | grep -o "from .*\]" | cut -c 6- | sort | uniq

Если вы не используете Linux, сохраните его в файл, получите машину с Linux и запустите на Linux (или используйте что-нибудь для запуска команд bash в Windows)

0 голосов
/ 10 ноября 2011

Вы можете использовать Maven Dependency Plugin для анализа вашего дерева зависимостей.Он также предложит вам зависимости, которые загружены / добавлены в ваш проект, потому что они зависят от любых других jar-файлов.

Запустите mvn dependency:tree и посмотрите, используете ли вы несколько ненужных jar-файлов.

0 голосов
/ 10 ноября 2011

Рассмотрите возможность использования уже существующего инструмента, такого как Поиск зависимостей или JDepend .

Как и во всех инструментах статического анализа, использование систем отражений или DI может обойти это; Я прибегнул к пользовательским инструментам, которые используют этот и другие входные данные, чтобы понять вещи, хотя они все еще статичны.

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

...