-
Notifications
You must be signed in to change notification settings - Fork 17
Description
It seems that modules should all follow the <major>.<minor>.<patch> scheme, instead of the <epoch>.<major>.<minor> scheme used by normal Scala libraries. sbt when using evicted looks at the version scheme information of the library's pom, defaulting to <epoch>.<major>.<minor> when absent. Thus, we get evication warnings, for example, when scala-xml 1.2.0 and 1.3.0 are mixed, although it would be binary compatible?
Therefore, I suggest to inject a default versionScheme to scala modules. This is supported since sbt 1.4. See also: sbt/sbt#5724
As far as I see, the three allowed values are "early-semver", "pvp", and "semver-spec", and the default would be "pvp". sbt has no information what these mean, but https://github.com/scalacenter/sbt-eviction-rules gives some clues:
early-semver: assumes the matched modules follow a variant of Semantic Versioning that enforces compatibility within 0.1.z.semver-spec: assumes the matched modules follow Semantic Versioning Spec that assumes no compatibility within 0.1.z.pvp: assumes the matched modules follow package versioning policy (quite common in Scala),
That would mean we should use always ? It's quite confusing, I don't see how compatibility witihin 0.x.y. is assumed. Perhaps we're doing it wrong for modules altogether and should use pvp instead?