sbt was reporting warning abouts inconsistent versions of dependencies
even if these dependencies didn't have the same configuration (as in
`provided` vs `compile`).

This commit fixes this problem by comparing the dependencies by
organization, artifact name and configuration.

Fixes sbt/sbt#1933
This commit is contained in:
Martin Duhem 2015-10-28 15:23:45 +01:00
parent 33478132c5
commit 541bd4a6a4
2 changed files with 11 additions and 2 deletions

View File

@ -536,14 +536,18 @@ private[sbt] object IvySbt {
{
import IvyRetrieve.toModuleID
val dds = moduleID.getDependencies
inconsistentDuplicateWarning(dds map { dd => toModuleID(dd.getDependencyRevisionId) })
val deps = dds flatMap { dd =>
val module = toModuleID(dd.getDependencyRevisionId)
dd.getModuleConfigurations map (c => module.copy(configurations = Some(c)))
}
inconsistentDuplicateWarning(deps)
}
def inconsistentDuplicateWarning(dependencies: Seq[ModuleID]): List[String] =
{
val warningHeader = "Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version:"
val out: mutable.ListBuffer[String] = mutable.ListBuffer()
(dependencies groupBy { dep => (dep.organization, dep.name) }) foreach {
(dependencies groupBy { dep => (dep.organization, dep.name, dep.configurations) }) foreach {
case (k, vs) if vs.size > 1 =>
val v0 = vs.head
(vs find { _.revision != v0.revision }) foreach { v =>

View File

@ -9,6 +9,7 @@ class InconsistentDuplicateSpec extends Specification {
Duplicate with different version should
be warned $warn1
not be warned if in different configurations $nodupe2
Duplicate with same version should
not be warned $nodupe1
@ -25,4 +26,8 @@ class InconsistentDuplicateSpec extends Specification {
def nodupe1 =
IvySbt.inconsistentDuplicateWarning(Seq(akkaActor230Test, akkaActor230)) must_== Nil
def nodupe2 =
IvySbt.inconsistentDuplicateWarning(Seq(akkaActor214, akkaActor230Test)) must_== Nil
}