Я знаю, что подобные вопросы задавались раньше, но я специально включил maven
тег на этом вопросе по причине. Сценарий:
- Проект
P
имеет две зависимости:D1-1.2.3
иD2-2.0.0
. D1-1.2.3
имеетD2-1.0.0
в качестве зависимости- Класс
C
вD1
использует (но не предоставляет) класс изD2
, в котором произошли критические изменения с версии1.0.0
на2.0.0
. P
используетC
Модель зависимости maven предписывает, что, поскольку P
в pom.xml
явно указывает зависимость D2
, будет использоваться версия из pom. Это приводит к разрыву P
с ошибкой компоновки из-за несовместимого изменения транзитивной зависимости.
semver FAQ утверждает, что это совместимое изменение. В нем говорится «поскольку это не влияет на общедоступный API», но в описанном мной сценарии каждое обновление зависимости неявно несет в себе риск поломки потребителей из-за ошибок компоновки.
Должен ли D1
увеличить основную версию? Является ли этот фрагмент спецификации semver просто непригодным для проектов maven из-за его модели зависимости?
C
(его интерфейс) на основе транзитивного изменения. Если вы можете сохранить его. Чем это не критическое изменение, потому что ваш API стабилен, если вам нужно изменить свой интерфейс, это будет критическое изменение... и приведет к серьезному изменению версии... Кроме того, я бы явно назвал изменение версии в вашем журнале изменений. .. - person khmarbaise   schedule 10.08.2018