From e74356f96daf49fcfcf35983014342161baa921a Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Fri, 17 Aug 2018 14:41:16 -0600 Subject: Add workspace plugin --- .../scala/xyz.driver.sbt/WorkspacePlugin.scala | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/scala/xyz.driver.sbt/WorkspacePlugin.scala (limited to 'src') diff --git a/src/main/scala/xyz.driver.sbt/WorkspacePlugin.scala b/src/main/scala/xyz.driver.sbt/WorkspacePlugin.scala new file mode 100644 index 0000000..9a66eb7 --- /dev/null +++ b/src/main/scala/xyz.driver.sbt/WorkspacePlugin.scala @@ -0,0 +1,32 @@ +package xyz.driver.sbt + +import java.nio.file.{Path, Paths} + +import sbt._ + +/** Enables using both source and binary dependencies for the same module, + * for faster development cycles in multi-project workflows. + * Adapted from https://github.com/sbt/sbt-sriracha. */ +object WorkspacePlugin extends AutoPlugin { + + private var _workspace = sys.props.get("sbt.workspace").orElse(sys.env.get("SBT_WORKSPACE")).map { base => + Paths.get(base) + } + def workspace: Option[Path] = synchronized(_workspace) + + override val requires = plugins.JvmPlugin + override val trigger = allRequirements + + object autoImport { + implicit class WorkspaceProject(project: Project) { + def dependsOn(binary: ModuleID, projectName: String, directory: Option[String] = None): Project = + WorkspacePlugin.workspace match { + case Some(base) => + project.dependsOn( + ProjectRef(base.resolve(directory.getOrElse(projectName)).toUri, projectName) + ) + case None => project.settings(Keys.libraryDependencies += binary) + } + } + } +} -- cgit v1.2.3