diff --git a/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala b/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala index 76bb4d2af..413583066 100644 --- a/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala +++ b/ivy/src/main/scala/sbt/ivyint/MergeDescriptors.scala @@ -79,8 +79,8 @@ private final class MergedDescriptors(a: DependencyDescriptor, b: DependencyDesc { if (as.isEmpty) if (bs.isEmpty) as - else defaultArtifact(a) +: explicitConfigurations(b, bs) - else if (bs.isEmpty) explicitConfigurations(a, as) :+ defaultArtifact(b) + else defaultArtifact(a) ++ explicitConfigurations(b, bs) + else if (bs.isEmpty) explicitConfigurations(a, as) ++ defaultArtifact(b) else concat(explicitConfigurations(a, as), explicitConfigurations(b, bs)) } private[this] def explicitConfigurations(base: DependencyDescriptor, arts: Array[DependencyArtifactDescriptor]): Array[DependencyArtifactDescriptor] = @@ -93,11 +93,14 @@ private final class MergedDescriptors(a: DependencyDescriptor, b: DependencyDesc else art } - private[this] def defaultArtifact(a: DependencyDescriptor): DependencyArtifactDescriptor = + private[this] def defaultArtifact(a: DependencyDescriptor): Array[DependencyArtifactDescriptor] = { val dd = new DefaultDependencyArtifactDescriptor(a, a.getDependencyRevisionId.getName, "jar", "jar", null, null) addConfigurations(dd, a.getModuleConfigurations) - dd + // If the dependency descriptor is empty, then it means that it has been created from a POM file. In this case, + // it is correct to create a seemingly non-existent dependency artifact. + if (a.getAllDependencyArtifacts.isEmpty) Array(dd) + else a.getAllDependencyArtifacts filter (_ == dd) } private[this] def copyWithConfigurations(dd: DependencyArtifactDescriptor, confs: Seq[String]): DependencyArtifactDescriptor = { diff --git a/sbt/src/sbt-test/dependency-management/default-artifact/build.sbt b/sbt/src/sbt-test/dependency-management/default-artifact/build.sbt new file mode 100644 index 000000000..89ca8a589 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/default-artifact/build.sbt @@ -0,0 +1,12 @@ +resolvers += Resolver.file("buggy", file("repo"))( + Patterns( + ivyPatterns = Seq("[organization]/[module]/[revision]/ivy.xml"), + artifactPatterns = Seq("[organization]/[module]/[revision]/[artifact].[ext]"), + isMavenCompatible = false, + descriptorOptional = true, + skipConsistencyCheck = true + ) +) + +libraryDependencies += "a" % "b" % "1.0.0" % "compile->runtime" artifacts(Artifact("b1", "jar", "jar")) +libraryDependencies += "a" % "b" % "1.0.0" % "test->runtime" artifacts(Artifact("b1", "jar", "jar")) diff --git a/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b1.jar b/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b1.jar new file mode 100644 index 000000000..619fa9368 Binary files /dev/null and b/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b1.jar differ diff --git a/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b2.jar b/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b2.jar new file mode 100644 index 000000000..619fa9368 Binary files /dev/null and b/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/b2.jar differ diff --git a/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/ivy.xml b/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/ivy.xml new file mode 100644 index 000000000..53fe74fc9 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/default-artifact/repo/a/b/1.0.0/ivy.xml @@ -0,0 +1,14 @@ + + + a + + + + + + + + + + + diff --git a/sbt/src/sbt-test/dependency-management/default-artifact/test b/sbt/src/sbt-test/dependency-management/default-artifact/test new file mode 100644 index 000000000..cd1752ba7 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/default-artifact/test @@ -0,0 +1,5 @@ +# Verify that we successfully get the artifacts. +# This project depends on a module for which we cannot generate a "default artifact", +# because no such artifact exists. + +> update \ No newline at end of file