diff --git a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/InputsTasks.scala b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/InputsTasks.scala index 9d0e2def8..bb39dfe19 100644 --- a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/InputsTasks.scala +++ b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/InputsTasks.scala @@ -102,10 +102,17 @@ object InputsTasks { val projectRefs = Structure.allRecursiveInterDependencies(state, projectRef) - val t = coursierProject.forAllProjects(state, projectRefs).map(_.values.toVector) + val t = coursierProject.forAllProjectsOpt(state, projectRefs) Def.task { - val projects = t.value + val projects = t.value.toVector.flatMap { + case (ref, None) => + if (ref.build != projectRef.build) + state.log.warn(s"Cannot get coursier info for project under ${ref.build}, is sbt-coursier also added to it?") + Nil + case (_, Some(p)) => + Seq(p) + } val projectModules = projects.map(_.module).toSet // this includes org.scala-sbt:global-plugins referenced from meta-builds in particular diff --git a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/Structure.scala b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/Structure.scala index 68b4411f3..d61a33ce5 100644 --- a/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/Structure.scala +++ b/modules/sbt-coursier-shared/src/main/scala/coursier/sbtcoursiershared/Structure.scala @@ -54,5 +54,21 @@ object Structure { val tasks = projects.flatMap(p => key.in(p).get(structure(state).data).map(_.map(it => (p, it)))) std.TaskExtra.joinTasks(tasks).join.map(_.toMap) } + + // ^^ things from sbt-structure ^^ + + def forAllProjectsOpt(state: State, projects: Seq[ProjectRef]): sbt.Task[Map[ProjectRef, Option[T]]] = { + val settings = structure(state).data + val tasks = projects.map { p => + val taskOpt = key.in(p).get(settings) + taskOpt match { + case None => + Def.task(p -> Option.empty[T]).evaluate(settings) + case Some(t) => + t.map(p -> Option(_)) + } + } + std.TaskExtra.joinTasks(tasks).join.map(_.toMap) + } } }