Repository navigation
Релиз переводит библиотеку на Jackson 3 и Spring Boot 4.
В релизе есть изменения, ломающие совместимость как по исходному коду,
так и бинарно: модуль max-bot-api-jackson работает только с Jackson 3,
стартер — только со Spring Boot 4. Модели, MaxBotAPI и остальные модули
не изменились.
Координаты артефактов: ru.etsft.max:max-bot-api-*:0.5.0.
ЛОМАЮЩИЕ ИЗМЕНЕНИЯ
- max-bot-api-jackson построен на Jackson 3 (tools.jackson.*, 3.1.5) и
транзитивно подтягивает tools.jackson.core:jackson-databind вместо
com.fasterxml.jackson.core. С Jackson 2 модуль не работает. - JacksonMaxSerializer.getObjectMapper() возвращает
tools.jackson.databind.ObjectMapper. Собственные сериализаторы и
десериализаторы, зарегистрированные в этом mapper-е, нужно перевести на
API Jackson 3 (ValueSerializer, ValueDeserializer, SerializationContext).
Аннотации остаются в com.fasterxml.jackson.annotation. - max-bot-api-spring-boot требует Spring Boot 4.x. Для webhook-режима
вместо spring-boot-starter-web нужен spring-boot-starter-webmvc.
СОХРАНЁННОЕ ПОВЕДЕНИЕ
- JSON на входе и выходе такой же, как в 0.4.1. Там, где у Jackson 3
изменились значения по умолчанию, выставлено прежнее поведение:
null-поля не сериализуются (NON_NULL), null для примитивов не вызывает
ошибку (FAIL_ON_NULL_FOR_PRIMITIVES отключён). - Перечисления по-прежнему пишутся в нижнем регистре: Jackson 3 не
спрашивает findSerializer для enum, поэтому сериализатор
зарегистрирован через findEnumSerializer. Без этого значения ушли бы в
MAX в верхнем регистре.
ЗАВИСИМОСТИ
- Jackson 2.21.1 → 3.1.5, Spring Boot 3.5.12 → 4.1.1,
SLF4J 2.0.17 → 2.0.19. - Только для сборки и тестов: JUnit 5.14.3 → 6.0.3, JsonUnit 4.1.1 → 6.2.0,
WireMock 3.13.1 → 3.13.2, Checkstyle 10.20.1 → 14.1.0,
плагин SpotBugs 6.4.8 → 6.5.11, Gradle 9.4.1 → 9.7.1 (wrapper и образы
в CI).
СБОРКА И ВЫПУСК
- Новая задача ./gradlew centralBundle: собирает подписанные артефакты
всех публикуемых модулей в build/central-bundle/
max-bot-api-java-<версия>-bundle.zip с раскладкой Maven в корне — архив,
который раньше приходилось собирать вручную. - Подпись обязательна, если передан ключ (signing.keyId или
signingInMemoryKey): ошибка в настройке ключа роняет сборку, а не даёт
неподписанный бандл. - GitLab CI, job publish: запускается вручную на тегах строго вида
vX.Y.Z; проверяет, что тег совпадает с version в gradle.properties;
подписывает ключом из защищённых переменных; убеждается, что .asc на
месте; загружает бандл через Central Publisher API
(scripts/central-upload.sh) в режиме USER_MANAGED и ждёт валидации.
Окончательная публикация подтверждается в Central Portal.
ДОКУМЕНТАЦИЯ
- README и README_RU: Jackson 3.x, Spring Boot 4.x,
spring-boot-starter-webmvc для webhook-режима, версия 0.5.0 в примерах
подключения.
ПРОВЕРКА
- ./gradlew clean build: 680 модульных тестов, Checkstyle, SpotBugs,
пороги покрытия — без ошибок. Тесты Jackson и клиента проходят и на
Jackson 3.1.5 из BOM Spring Boot 4.1.1. - ./gradlew centralBundle: бандл содержит 7 модулей с jar, sources,
javadoc, pom, module, подписями и контрольными суммами. Сборка с
некорректным ключом падает; загрузка с неверным токеном завершается
ошибкой 401. - liveTest против боевого MAX API на Jackson 3: 52 теста, 48 успешно,
0 падений. Сериализация и разбор ответов сервера через Jackson 3 проходят
на реальных данных. 4 теста пропущены окружением: deleteChat — MAX
отказывает боту (нужно владение чатом), webhookRoundTrip — не задан
MAX_IT_WEBHOOK_URL, unsubscribe — зависит от него и пропускается, так
как подписка не создавалась, getChatByLink — в MAX_IT_CHAT_LINK
ссылка-приглашение.