Tbee
Tbee

Reputation: 460

maven; how to break backwards compatibility?

Maven has a version management system that picks the highest version of a library if multiple versions are referenced. For example if a pom A refers to a version 1.1 and and pom B to 1.2, then a pom C (referring to both A and B) will use the highest version; 1.2.

This approach assumes that 1.2 is 100% backwards compatible with 1.1 and this is a good and required approach. However, at certain times in the lifecycle of libraries it is wise to clean up shop. For me any major changes in the API means increasing the major version, so a 2.0 does not need to be 100% backwards compatible to the latest 1.x. Fine.

Maven, however, does not really care and if pom B would be upgraded from 1.2 to 2.0, Maven would then use 2.0, but pom A cannot work with that version.

How to tell Maven that a version is no longer backwards compatible?

I've tried specifying excluding ranges, so A refers [1.1,1.999) and B refers [2.0,2.999). However, Maven still solves the maximum version number (2.0).

Upvotes: 4

Views: 2104

Answers (3)

jtahlborn
jtahlborn

Reputation: 53694

Have you looked into the maven enforcer plugin? it may have something like this, or you may be able to write a custom rule.

Upvotes: 0

khmarbaise
khmarbaise

Reputation: 97547

First it's a bad practice to use version ranges in Maven Builds furthermore you have to define a version numbering definition which says 1.0 and 1.1 must be backwards compatible whereas 2.0 is not but that's a definition you have to make. Maven does not know about that. I would recommend to use Major.Minor.Increment-Qualifier etc. In my opinion you should pin your versions fix otherwise you are not able to reproduce your builds.

Upvotes: 4

Chris Nava
Chris Nava

Reputation: 6802

I would change the artifact ID (probably by adding the major version number). This would make the 1.x and 2.x versions different beasts to Maven.

Upvotes: 1

Related Questions