Как мы можем программно определить, был ли класс java изменен? - PullRequest
0 голосов
/ 25 апреля 2020

Кроме отражения, существует ли способ, с помощью которого мы можем определить, был ли класс java изменен (поля). У нас есть тысячи классов в нашем приложении. У нас есть требование, чтобы у нас было несколько тестов, которые могли бы определить, были ли классы java изменены разработчиками - промежутки между добавлением полей или изменением модификаторов доступа или изменением типов и т. Д. c.

Отражение не работает, так как у нас есть сотни классов, которые мы хотим отслеживать?

Есть ли надежный способ, с помощью которого мы можем надежно рассчитать некоторый тип га sh, учитывая, что у нас есть файлы классов java, хранящиеся в db как тип байта postgres?

1 Ответ

0 голосов
/ 25 апреля 2020

Отражение будет работать при условии, что вы можете загрузить классы; то есть их зависимости доступны.

Другой подход заключается в использовании библиотек Apache BCEL (http://commons.apache.org/proper/commons-bcel/) или ASM (https://asm.ow2.io/). В дополнение к проверке сигнатур полей и методов, они также позволяют вам проверять и даже изменять байт-коды методов.

Наконец, было бы целесообразно проанализировать выходные данные javap, хотя такой подход фр agile. Выходной формат javap не указан, и он может измениться с одной версии Java на другую.


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

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

...