2009-06-18 3 views
4

Я работаю в Java-проекте, где используется библиотека с осью 2 из Apache. Библиотека с осью 2 состоит из около 20 файлов jar, а некоторые из них не используются. Что я хочу знать, есть ли способ определить, какие из этих файлов jar являются неиспользуемыми.Как я могу определить ненужные банки, включенные в мой проект?

Я использую Eclipse IDE, и я подумал, что одним из способов решения проблемы является добавить одну банку в то время, пока я не получу сообщений об ошибках пропущенных классов. Однако я не уверен, что это будет работать, так как некоторые из недостающих ошибок классов отображаются только во время выполнения.

Кто-нибудь знает, как лучше решить эту проблему?

ответ

6

болтун FTW

http://www.jboss.org/tattletale

JBoss Tattletale является инструментом, который может помочь вам получить обзор проекта вы работаете или продукт, который вы зависите.

инструмент предоставит вам отчеты, которые могут помочь вам

  • Определение зависимостей между JAR-файлов
  • Точечные если класс находится в нескольких файлов JAR
  • Пятно, если тот же файл JAR находится в нескольких местах
  • Со списком того, что требует от каждого файла JAR и обеспечивает
+0

Я попробую татуировку. Кто-нибудь знает, могут ли tattletales указать идентификаторы классов времени выполнения? –

+0

Что такое «зависимости времени выполнения»? Я думаю, нет, если вы имеете в виду отражение, Class.forName и прочее. – alamar

+0

Зависимости времени выполнения относятся не только к отражающему коду, но также к транзитивным зависимостям, то есть зависит от B. зависит от C. Приложение может компилироваться отлично, но при развертывании оно не работает, поскольку C не существует. – skaffman

1

Я бы следуйте своей первоначальной идее добавления одной банки в момент до ее компиляции.

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

1

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

Class.forName(className); 

Возможно, вы сможете определить имена классов, используемые для вышеуказанного, но это маловероятно.

Поскольку классы будут запрашиваться/разрешаться во время выполнения, вы можете запустить свой (полный) набор тестов, чтобы определить, все ли работает. Но в конечном итоге я был бы очень осторожен в том, чтобы удалить банки из пакета, такого как Axis. Я предполагаю, что они там с какой-то целью. Является ли размер файла jar действительно проблемой?

Смежные вопросы