Обнаружение изменений/эволюции API

Я хочу измерить эволюцию API для данного проекта Java, в частности, новые/переименованные классы, новые методы, новые устаревшие методы и т. д. Есть ли инструмент, обнаруживающий такие изменения?

Еще в 2007 году был инициирован проект Google GSoc. , однако, я не могу найти окончательную работу.


person notnoop    schedule 03.11.2009    source источник
comment
Связанный вопрос: stackoverflow.com/questions/2040693/   -  person linuxbuild    schedule 31.08.2011


Ответы (6)


Я бы использовал для этого Clirr, средство проверки двоичной совместимости. С веб-сайта Clirr:

Что это?

Clirr — это инструмент, который проверяет библиотеки Java на совместимость двоичных файлов и исходного кода со старыми выпусками. По сути, вы даете ему два набора файлов jar, и Clirr выводит список изменений в общедоступном API. Задача Clirr Ant может быть настроена на прерывание сборки при обнаружении несовместимых изменений API. В процессе непрерывной интеграции Clirr может автоматически предотвращать случайное появление проблем с совместимостью двоичных файлов или исходных кодов.

...

Функции

  • Сообщайте обо всех изменениях API (в настоящее время реализованы лишь частично)
  • Оценивайте каждое изменение wrt. бинарная и исходная совместимость
  • поддержка отчетов в виде простого текста и XML
  • Гибкая обработка сбоев (предупреждения и ошибки, прерывание сборки или установка свойства ошибки)
person Pascal Thivent    schedule 03.11.2009
comment
Clirr выглядит очень устаревшим по состоянию на 2018 год. Я не думаю, что он работает даже с JAR-файлами, скомпилированными в Java 8. - person Jose Duarte; 16.03.2018
comment
Последний бинарник от 2005 года - person Johan Tidén; 23.08.2019

Также появился новый инструмент проверки эволюции API под названием Revapi.

person metlos    schedule 26.11.2014
comment
Это потрясающий инструмент!! - person Pavol Loffay; 07.06.2017

Кстати, в исходном коде gwt, кажется, есть средство проверки API, не знаю, является ли это продуктом упомянутого проекта GSoc.

GwtJavaApiCompatibilityChecker также используется в build.xml

person jitter    schedule 03.11.2009
comment
Это реальный проект, о котором я говорил! - person notnoop; 06.11.2009

Также стоит упомянуть JDiff.

JDiff — это доклет Javadoc, который создает HTML-отчет обо всех пакетах, классах, конструкторах, методах и полях, которые были удалены, добавлены или изменены каким-либо образом, включая их документацию, при сравнении двух API. Это очень полезно для точного описания того, что изменилось между двумя выпусками продукта. Сравнивается только API (интерфейс прикладного программирования) каждой версии. Он не сравнивает то, что делает исходный код при выполнении.

Как я понял он запускается в исходной папке старой версии и генерирует xml файл. То же самое для исходной папки с новой версией. Затем два xml-вывода сравниваются и составляется список изменений. В стиле html-javadoc-api

person jitter    schedule 03.11.2009
comment
JDiff работает с Javadoc кода, а не с самим кодом. Это хороший компаньон для Clirr (если вы можете доверять Javadoc), и он упоминается в связанных проектах (clirr.sourceforge.net/related.html). Но я предпочитаю то, что работает на уровне кода. - person Pascal Thivent; 03.11.2009

Вы также можете попробовать japicmp.

person siom    schedule 02.11.2015

Попробуйте инструмент japi-compliance-checker. Это с открытым исходным кодом. Инструмент показывает изменения API и обнаруживает проблемы обратной исходной (SC) и обратной двоичной (BC) совместимости между двумя jar-архивами:

japi-compliance-checker -old LIB-0.jar -new LIB-1.jar

Примеры отчетов для log4j: http://abi-laboratory.pro/java/tracker/timeline/log4j/

введите здесь описание изображения

Вы можете найти классификацию найденных проблем совместимости по степени серьезности в отчетах для конкретных версий библиотек:

введите здесь описание изображения

person linuxbuild    schedule 21.03.2016