diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/CoursierDependencyResolution.scala b/modules/lm-coursier/src/main/scala/lmcoursier/CoursierDependencyResolution.scala index 531c96635..7b117e865 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/CoursierDependencyResolution.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/CoursierDependencyResolution.scala @@ -178,6 +178,7 @@ class CoursierDependencyResolution(conf: CoursierConfiguration) extends Dependen cache = cache0, parallel = conf.parallelDownloads, classpathOrder = conf.classpathOrder, + missingOk = conf.missingOk ) val sbtBootJarOverrides = SbtBootJars( @@ -208,6 +209,7 @@ class CoursierDependencyResolution(conf: CoursierConfiguration) extends Dependen includeSignatures = false, sbtBootJarOverrides = sbtBootJarOverrides, classpathOrder = conf.classpathOrder, + missingOk = conf.missingOk ) val e = for { diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsParams.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsParams.scala index 2f2873f7f..5873cbea9 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsParams.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsParams.scala @@ -15,4 +15,5 @@ final case class ArtifactsParams( cache: FileCache[Task], parallel: Int, classpathOrder: Boolean, + missingOk: Boolean ) diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsRun.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsRun.scala index c456beaff..f208fd2ec 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsRun.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/ArtifactsRun.scala @@ -51,6 +51,15 @@ object ArtifactsRun { else Nil } + .addTransformArtifacts { artifacts => + if (params.missingOk) + artifacts.map { + case (dependency, publication, artifact) => + (dependency, publication, artifact.withOptional(true)) + } + else + artifacts + } .withCache( params .cache diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/ResolutionParams.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/ResolutionParams.scala index b262b3414..ced79bf3c 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/ResolutionParams.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/ResolutionParams.scala @@ -62,7 +62,7 @@ final case class ResolutionParams( cache = cleanCache ), cleanCache, - sbtClassifiers + missingOk ) } diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/SbtUpdateReport.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/SbtUpdateReport.scala index 1691db61e..420b1fb34 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/SbtUpdateReport.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/SbtUpdateReport.scala @@ -142,6 +142,7 @@ private[internal] object SbtUpdateReport { keepPomArtifact: Boolean = false, includeSignatures: Boolean = false, classpathOrder: Boolean, + missingOk: Boolean ): Vector[ModuleReport] = { val deps = classifiersOpt match { @@ -156,8 +157,9 @@ private[internal] object SbtUpdateReport { deps.map { case (d, p, a) => val d0 = d.withAttributes(d.attributes.withClassifier(p.classifier)) - val f = map.get((d0, p, a)).flatten - (d, p, a, f) // not d0 + val a0 = if (missingOk) a.withOptional(true) else a + val f = map.get((d0, p, a0)).flatten + (d, p, a0, f) // not d0 } case None => deps.map { @@ -301,6 +303,7 @@ private[internal] object SbtUpdateReport { keepPomArtifact: Boolean = false, includeSignatures: Boolean = false, classpathOrder: Boolean, + missingOk: Boolean ): UpdateReport = { val configReports = configs.map { @@ -324,6 +327,7 @@ private[internal] object SbtUpdateReport { keepPomArtifact = keepPomArtifact, includeSignatures = includeSignatures, classpathOrder = classpathOrder, + missingOk = missingOk ) val reports0 = subRes.rootDependencies match { diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateParams.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateParams.scala index 4f1f8fed0..5a5e641e9 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateParams.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateParams.scala @@ -19,6 +19,7 @@ final case class UpdateParams( includeSignatures: Boolean, sbtBootJarOverrides: Map[(Module, String), File], classpathOrder: Boolean, + missingOk: Boolean ) { def artifactFileOpt( @@ -38,7 +39,11 @@ final case class UpdateParams( else None - fromBootJars.orElse(artifacts.get(artifact)) + val artifact0 = + if (missingOk) artifact.withOptional(true) + else artifact + + fromBootJars.orElse(artifacts.get(artifact0)) } } diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateRun.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateRun.scala index d65a8c58c..cdd548b8a 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateRun.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/UpdateRun.scala @@ -96,6 +96,7 @@ object UpdateRun { log, includeSignatures = params.includeSignatures, classpathOrder = params.classpathOrder, + missingOk = params.missingOk ) }