diff --git a/build.sbt b/build.sbt index c659064cb..e3593c3e1 100644 --- a/build.sbt +++ b/build.sbt @@ -40,6 +40,22 @@ lazy val `lm-coursier` = project contrabandFormatsForType in generateContrabands in Compile := DatatypeConfig.getFormats ) +lazy val `sbt-lm-coursier` = project + .in(file("modules/sbt-lm-coursier")) + .enablePlugins(ScriptedPlugin) + .dependsOn(`lm-coursier`) + .settings( + plugin, + sbtTestDirectory := sbtTestDirectory.in(`sbt-coursier`).value, + scriptedDependencies := { + scriptedDependencies.value + + // TODO Get those automatically + // (but shouldn't scripted itself handle that…?) + publishLocal.in(`lm-coursier`).value + } + ) + lazy val `sbt-coursier` = project .in(file("modules/sbt-coursier")) .enablePlugins(ScriptedPlugin) @@ -104,6 +120,7 @@ lazy val `sbt-coursier-root` = project .aggregate( `lm-coursier`, `sbt-coursier`, + `sbt-lm-coursier`, `sbt-pgp-coursier`, `sbt-shading` ) diff --git a/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala b/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala new file mode 100644 index 000000000..86dcc8d07 --- /dev/null +++ b/modules/sbt-lm-coursier/src/main/scala/coursier/sbtlmcoursier/LmCoursierPlugin.scala @@ -0,0 +1,45 @@ +package coursier.sbtlmcoursier + +import coursier.lmcoursier.{CoursierConfiguration, CoursierDependencyResolution} +import sbt.{AutoPlugin, Classpaths, Def, Task, taskKey} +import sbt.KeyRanks.DTask +import sbt.Keys.{dependencyResolution, fullResolvers, otherResolvers, streams} +import sbt.librarymanagement.DependencyResolution + +object LmCoursierPlugin extends AutoPlugin { + + object autoImport { + val coursierConfiguration = taskKey[CoursierConfiguration]("General dependency management (Coursier) settings, such as the resolvers and options to use.").withRank(DTask) + } + + import autoImport._ + + + override def trigger = allRequirements + + // requiring IvyPlugin… to override it, and so that it doesn't override us :| + override def requires = sbt.plugins.IvyPlugin + + // putting this in projectSettings like sbt.plugins.IvyPlugin does :| + override def projectSettings = Seq( + dependencyResolution := mkDependencyResolution.value, + coursierConfiguration := mkCoursierConfiguration.value + ) + + + private def mkCoursierConfiguration: Def.Initialize[Task[CoursierConfiguration]] = + Def.task { + val (rs, other) = (fullResolvers.value.toVector, otherResolvers.value.toVector) + val s = streams.value + Classpaths.warnResolversConflict(rs ++: other, s.log) + CoursierConfiguration() + .withResolvers(rs) + .withOtherResolvers(other) + .withLog(s.log) + } + private def mkDependencyResolution: Def.Initialize[Task[DependencyResolution]] = + Def.task { + CoursierDependencyResolution(coursierConfiguration.value) + } + +}