steps
scala> import coursier.version.VersionCompatibility.EarlySemVer
import coursier.version.VersionCompatibility.EarlySemVer
scala> EarlySemVer.isCompatible("3.10.1.Final", "3.7.0.Final")
val res1: Boolean = false
scala> EarlySemVer.isCompatible("9.2.14.v20151106", "9.4.25.v20191220")
val res2: Boolean = false
problem
From the specification point of view these Final and v20191220 stuff at the fourth segment are not compatible with Semantic Versioning, however, Netty and Jetty seem to have them, they are among the most widely used web backends, so they frequently come up as false negatives.
expectation
scala> import coursier.version.VersionCompatibility.EarlySemVer
import coursier.version.VersionCompatibility.EarlySemVer
scala> EarlySemVer.isCompatible("3.10.1.Final", "3.7.0.Final")
val res1: Boolean = true
scala> EarlySemVer.isCompatible("9.2.14.v20151106", "9.4.25.v20191220")
val res2: Boolean = true
steps
problem
From the specification point of view these
Finalandv20191220stuff at the fourth segment are not compatible with Semantic Versioning, however, Netty and Jetty seem to have them, they are among the most widely used web backends, so they frequently come up as false negatives.expectation