diff --git a/core/shared/src/main/scala/coursier/core/Resolution.scala b/core/shared/src/main/scala/coursier/core/Resolution.scala index 9763284bd..f3d7e4d20 100644 --- a/core/shared/src/main/scala/coursier/core/Resolution.scala +++ b/core/shared/src/main/scala/coursier/core/Resolution.scala @@ -885,8 +885,8 @@ final case class Resolution( .getOrElse(Map.empty) ) - private def artifacts0(overrideClassifiers: Option[Seq[String]]): Seq[Artifact] = - for { + private def artifacts0(overrideClassifiers: Option[Seq[String]]): Seq[Artifact] = { + val res = for { dep <- minDependencies.toSeq (source, proj) <- projectCache .get(dep.moduleVersion) @@ -895,6 +895,9 @@ final case class Resolution( .artifacts(dep, proj, overrideClassifiers) } yield artifact + res.distinct + } + def classifiersArtifacts(classifiers: Seq[String]): Seq[Artifact] = artifacts0(Some(classifiers)) diff --git a/tests/shared/src/test/scala/coursier/test/CentralTests.scala b/tests/shared/src/test/scala/coursier/test/CentralTests.scala index f9403edeb..0be67d2fe 100644 --- a/tests/shared/src/test/scala/coursier/test/CentralTests.scala +++ b/tests/shared/src/test/scala/coursier/test/CentralTests.scala @@ -271,6 +271,43 @@ object CentralTests extends TestSuite { ) } } + + 'artifacts - { + 'uniqueness - { + async { + val deps = Set( + Dependency( + Module("org.scala-lang", "scala-compiler"), "2.11.8" + ), + Dependency( + Module("org.scala-js", "scalajs-compiler_2.11.8"), "0.6.8" + ) + ) + + val res = await(resolve(deps)) + + assert(res.errors.isEmpty) + assert(res.conflicts.isEmpty) + assert(res.isDone) + + val artifacts = res.artifacts + + val map = artifacts.groupBy(a => a) + + val nonUnique = map.filter { + case (_, l) => l.length > 1 + } + + if (nonUnique.nonEmpty) + println( + "Found non unique artifacts:\n" + + nonUnique.keys.toVector.map(" " + _).mkString("\n") + ) + + assert(nonUnique.isEmpty) + } + } + } } }