diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/Inputs.scala b/modules/lm-coursier/src/main/scala/lmcoursier/Inputs.scala
index a88fae0bf..da55d13b8 100644
--- a/modules/lm-coursier/src/main/scala/lmcoursier/Inputs.scala
+++ b/modules/lm-coursier/src/main/scala/lmcoursier/Inputs.scala
@@ -123,12 +123,12 @@ object Inputs {
sets.values.toVector.distinct.map(_.set.toSet)
}
- def exclusions(
+ def exclusionsSeq(
excludeDeps: Seq[InclExclRule],
sv: String,
sbv: String,
log: Logger
- ): Set[(Organization, ModuleName)] = {
+ ): Seq[(Organization, ModuleName)] = {
var anyNonSupportedExclusionRule = false
@@ -144,7 +144,6 @@ object Inputs {
Seq((Organization(rule.organization), ModuleName(name)))
}
}
- .toSet
if (anyNonSupportedExclusionRule)
log.warn("Only supported exclusion rule fields: organization, name")
@@ -152,6 +151,14 @@ object Inputs {
res
}
+ def exclusions(
+ excludeDeps: Seq[InclExclRule],
+ sv: String,
+ sbv: String,
+ log: Logger
+ ): Set[(Organization, ModuleName)] =
+ exclusionsSeq(excludeDeps, sv, sbv, log).toSet
+
def forceVersions(depOverrides: Seq[ModuleID], sv: String, sbv: String): Seq[(Module, String)] =
depOverrides.map(FromSbt.moduleVersion(_, sv, sbv))
diff --git a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/IvyXml.scala b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/IvyXml.scala
index 5b9d614dd..9369a42fd 100644
--- a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/IvyXml.scala
+++ b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/IvyXml.scala
@@ -3,11 +3,12 @@ package coursier.sbtcoursiershared
import java.nio.charset.StandardCharsets.UTF_8
import java.nio.file.Files
+import lmcoursier.Inputs
import lmcoursier.definitions.{Configuration, Project}
import org.apache.ivy.core.module.id.ModuleRevisionId
import sbt.{Def, Setting, Task, TaskKey}
import sbt.internal.librarymanagement.IvySbt
-import sbt.librarymanagement.PublishConfiguration
+import sbt.librarymanagement.{CrossVersion, PublishConfiguration}
import scala.collection.JavaConverters._
import scala.xml.{Node, PrefixedAttribute}
@@ -16,6 +17,7 @@ object IvyXml {
private[sbtcoursiershared] def rawContent(
currentProject: Project,
+ exclusions: Seq[(String, String)],
shadedConfigOpt: Option[Configuration]
): String = {
@@ -28,12 +30,13 @@ object IvyXml {
val printer = new scala.xml.PrettyPrinter(Int.MaxValue, 2)
"""""" + '\n' +
- printer.format(content(currentProject, shadedConfigOpt))
+ printer.format(content(currentProject, exclusions, shadedConfigOpt))
}
// These are required for publish to be fine, later on.
private def writeFiles(
currentProject: Project,
+ exclusions: Seq[(String, String)],
shadedConfigOpt: Option[Configuration],
ivySbt: IvySbt,
log: sbt.util.Logger
@@ -53,7 +56,7 @@ object IvyXml {
val cacheIvyFile = ivyCacheManager.getResolvedIvyFileInCache(ivyModule)
val cacheIvyPropertiesFile = ivyCacheManager.getResolvedIvyPropertiesInCache(ivyModule)
- val content0 = rawContent(currentProject, shadedConfigOpt)
+ val content0 = rawContent(currentProject, exclusions, shadedConfigOpt)
cacheIvyFile.getParentFile.mkdirs()
log.info(s"Writing Ivy file $cacheIvyFile")
Files.write(cacheIvyFile.toPath, content0.getBytes(UTF_8))
@@ -63,7 +66,11 @@ object IvyXml {
Files.write(cacheIvyPropertiesFile.toPath, Array.emptyByteArray)
}
- private def content(project0: Project, shadedConfigOpt: Option[Configuration]): Node = {
+ private def content(
+ project0: Project,
+ exclusions: Seq[(String, String)],
+ shadedConfigOpt: Option[Configuration]
+ ): Node = {
val filterOutDependencies =
shadedConfigOpt.toSet[Configuration].flatMap { shadedConfig =>
@@ -148,11 +155,16 @@ object IvyXml {
n % moduleAttrs
}
+ val excludeElems = exclusions.toVector.map {
+ case (org, name) =>
+
+ }
+
{infoElem}
{confElems}
{publicationElems}
- {dependencyElems}
+ {dependencyElems}{excludeElems}
}
@@ -166,12 +178,20 @@ object IvyXml {
val doGen = coursierGenerateIvyXml.value
if (doGen)
Def.task {
+ val sv = sbt.Keys.scalaVersion.value
+ val sbv = sbt.Keys.scalaBinaryVersion.value
+ val log = sbt.Keys.streams.value.log
val currentProject = {
val proj = coursierProject.value
val publications = coursierPublications.value
proj.withPublications(publications)
}
- writeFiles(currentProject, shadedConfigOpt, sbt.Keys.ivySbt.value, sbt.Keys.streams.value.log)
+ val excludeDeps = Inputs.exclusionsSeq(InputsTasks.actualExcludeDependencies.value, sv, sbv, log)
+ .map {
+ case (org, name) =>
+ (org.value, name.value)
+ }
+ writeFiles(currentProject, excludeDeps, shadedConfigOpt, sbt.Keys.ivySbt.value, log)
}
else
Def.task(())
diff --git a/modules/sbt-coursier-shared/src/test/scala/coursier/sbtcoursiershared/IvyXmlTests.scala b/modules/sbt-coursier-shared/src/test/scala/coursier/sbtcoursiershared/IvyXmlTests.scala
index 6a460e0be..3085d849a 100644
--- a/modules/sbt-coursier-shared/src/test/scala/coursier/sbtcoursiershared/IvyXmlTests.scala
+++ b/modules/sbt-coursier-shared/src/test/scala/coursier/sbtcoursiershared/IvyXmlTests.scala
@@ -21,7 +21,7 @@ object IvyXmlTests extends TestSuite {
Info("", "", Nil, Nil, None)
)
- val content = IvyXml.rawContent(project, None)
+ val content = IvyXml.rawContent(project, Nil, None)
assert(!content.contains(""))
}
diff --git a/modules/sbt-coursier/src/sbt-test/shared-1/all-exclude-dependencies/coursier b/modules/sbt-coursier/src/sbt-test/shared-1/all-exclude-dependencies/coursier
index 6cada6f8b..1153c1797 100755
Binary files a/modules/sbt-coursier/src/sbt-test/shared-1/all-exclude-dependencies/coursier and b/modules/sbt-coursier/src/sbt-test/shared-1/all-exclude-dependencies/coursier differ
diff --git a/modules/sbt-coursier/src/sbt-test/shared-1/exclude-dependencies/coursier b/modules/sbt-coursier/src/sbt-test/shared-1/exclude-dependencies/coursier
index 6cada6f8b..eb1b55198 100755
Binary files a/modules/sbt-coursier/src/sbt-test/shared-1/exclude-dependencies/coursier and b/modules/sbt-coursier/src/sbt-test/shared-1/exclude-dependencies/coursier differ
diff --git a/modules/sbt-coursier/src/sbt-test/shared-1/exclude-dependencies/test b/modules/sbt-coursier/src/sbt-test/shared-1/exclude-dependencies/test
index 9eee79a6c..11d45a4a2 100644
--- a/modules/sbt-coursier/src/sbt-test/shared-1/exclude-dependencies/test
+++ b/modules/sbt-coursier/src/sbt-test/shared-1/exclude-dependencies/test
@@ -3,5 +3,4 @@
$ exec java -jar coursier launch io.get-coursier.test:sbt-coursier-exclude-dependencies_2.12:0.1.0-SNAPSHOT
> b/run
> b/publishLocal
-# doesn't pass yet (missing exclusions of root deps in ivy.xml?)
-# $ exec java -jar coursier launch io.get-coursier.test:sbt-coursier-exclude-dependencies-2_2.12:0.1.0-SNAPSHOT
+$ exec java -jar coursier launch io.get-coursier.test:sbt-coursier-exclude-dependencies-2_2.12:0.1.0-SNAPSHOT