Найти минимально необходимый Java-путь к классам - PullRequest
8 голосов
/ 16 сентября 2008

Есть ли инструмент для обнаружения ненужных jar-файлов?

Например, скажите, что у меня есть myapp.jar, который я могу запустить с помощью пути к классам, содержащего hibernate.jar, junit.jar и easymock.jar. Но на самом деле он будет работать нормально, используя только hibernate.jar, поскольку код, вызывающий junit.jar, недоступен.

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

Если такого инструмента не существует, каковы оптимальные методы для решения, какие зависимости необходимы? Мне кажется, что это должно быть общая проблема.

Ответы [ 4 ]

3 голосов
/ 17 сентября 2008

Это невозможно в системе, которая может использовать отражение.

Тем не менее, инструмент статического анализа может неплохо работать, если вы не используете ЛЮБОЕ отражение.

2 голосов
/ 17 сентября 2008

Вы смотрели на Dependency Finder?

http://depfind.sourceforge.net/

На этом сайте также имеется удобный список большинства других доступных инструментов зависимости Java.

1 голос
/ 17 сентября 2008

Я использовал

http://code.google.com/p/jarjar/

и нашел его довольно хорошим.

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

0 голосов
/ 17 сентября 2008

Что-то, что можно добавить к ответу Билла К.: вы можете вообще не использовать рефлексию, но используемые вами JAR могут. Я помню, что сталкивался с чем-то подобным с xalan & xerces, где исключение ClassNotFoundException вызывалось во время выполнения.

...