On 19 February 2015 at 18:47, sebb <seb...@gmail.com> wrote:
> Not necessarily, my example was about requiring a major bump in JVM version.
> Still binary compatible, but might require users to upgrade their host JVM.
> Therefore it may be worth flagging the change to end-users via the
> version number.

Agreed that in Commons could be a good example for bumping major
without changing the package name, although generally speaking "change
of dependency requirements" would be a minor change.


> AFAIK Maven does not do that.

No (but perhaps it should).

Maven's understanding of "1.5" without any ranges will also cover
"2.1" - which by SemVer is risky business (perhaps your favourite
public method has been deleted), although with the Commons versioning
practice, it should still generally "just work" if a Commons module
changed major without binary incompatibility (e.g. for JVM example)
and thus didn't rename.


Maven 3 will honour a range like [1.3,2.0) (which should be the
SemVer-safe way to depend on 1.3.x but avoiding 2.0.0 and above).

If a dependency with such a range is combined with another dependency
that pulls in a at first look conflicting version, say "2.1", then as
"2.1" is a not a range, it is a "soft requirement" with no min or max,
thus say 1.5  would satisfy both dependencies.

http://docs.codehaus.org/display/MAVEN/Dependency+Mediation+and+Conflict+Resolution#DependencyMediationandConflictResolution-DependencyVersionRanges


Depending on the change and usage this might or might not work at
compile and/or runtime. For instance, if you have a Java interface
that renames a method, that is clearly a new major version (and new
artifact within Commons) - yet (without such ranges) Maven will
happily let you use an older implementation that does not implement
the method that you are calling - the error is not apparent until
runtime.


If you have two incompatible ranges, say "2.1" is changed to [2.1,) -
then you get error from Maven 3:

[ERROR] Failed to execute goal on project user: Could not resolve
dependencies for project org.example.user:user:jar:0.0.1-SNAPSHOT:
Failed to collect dependencies for
org.example.user:user:jar:0.0.1-SNAPSHOT: Could not resolve version
conflict among [com.example.api:example-api:jar:[2.0.0,),
com.example.impl:example-impl:jar:2.3.0 ->
com.example.api:example-api:jar:[1.0,2.0)] -> [Help 1]






> What is the evidence that a major bump causes warnings?

See above.

Note that a quick grep in my big .m2/repository didn't reveal any
dependencies on commons* that used ranges - probably because of
Commons being good in not breaking stuff. :)





-- 
Stian Soiland-Reyes
Apache Taverna (incubating)
http://orcid.org/0000-0001-9842-9718

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to