Я не знаю, специальный инструмент, чтобы сделать это, но мне кажется, это может быть сделано с умеренной сложности с использованием Perl-скрипт, если у вас есть сосуд или источник ,
Вы можете запустить банку через JAD http://en.wikipedia.org/wiki/JAD_(JAva_Decompiler) для создания источника, а затем написать PERL скрипт, который:
просматривает каждый файл источника
а. находит все выражение строка импорта рег
б находит все исходные файлы в декомпилированном источнике третьей стороны, которая соответствует импортируемому ПАКЕТА
гр. для каждого файла в третьей стороне, извлеките имена методов
d. если он совпадает, сохраните метод + класс + пакет.
Это, конечно, может быть гораздо более эффективным - вы могли бы сделать хэш-таблицу всех пакетов, а также в том, что хэш-таблица всех методов третьей стороны.
Как только метод используется, его можно удалить из таблицы, так как вам не нужно искать его снова.
Но, вероятно, метода грубой силы достаточно, потому что это не проблема с интенсивным вычислением (хотя, конечно, для человека это было бы очень трудоемким!).
Замените ruby / python/php/sed/awk для perl, если это ваше предпочтение.
Что именно вы ищете: - что третья сторона используются пакеты/классы/методы по вашему коду? - Какие методы * не * используются для поиска мертвого кода? Также имейте в виду, что такой анализ может быть неполным, если вы используете отражение. Обратите внимание, что в простейшем случае вы можете просто искать grep для всех операторов импорта в * .java-файлах ... –
Какие сторонние пакеты/классы/методы используются нашим кодом. В частности, мы поставляем .jar клиенту, и они хотят точно знать, какие методы он вызывает. Просто grepping для операторов импорта скажет нам, какие пакеты мы используем, но они хотят список каждого метода (и прежде чем спросить, нет, я не знаю почему). –
На всякий случай вы попытаетесь убедить клиента в противном случае: так что, если какая-то библиотека вызывает какой-то метод из другой библиотеки ...? Или что, если ваш собственный метод (который вызывает некоторый библиотечный метод) никогда не вызывается? – Arjan