diff --git a/main/src/main/scala/sbt/dsl/package.scala b/main/src/main/scala/sbt/dsl/package.scala index d3b553373..f7f1df2e3 100644 --- a/main/src/main/scala/sbt/dsl/package.scala +++ b/main/src/main/scala/sbt/dsl/package.scala @@ -4,12 +4,13 @@ import internals.{ DslEntry, DslConfigs, DslEnablePlugins, - DslDisablePlugins + DslDisablePlugins, + DslDependsOn } package object dsl { def enablePlugins(ps: AutoPlugin*): DslEntry = DslEnablePlugins(ps) def disablePlugins(ps: AutoPlugin*): DslEntry = DslDisablePlugins(ps) def configs(cs: Configuration*): DslEntry = DslConfigs(cs) - -} \ No newline at end of file + def dependsOn(deps: ClasspathDep[ProjectReference]*): DslEntry = DslDependsOn(deps) +} diff --git a/main/src/main/scala/sbt/internals/DslAst.scala b/main/src/main/scala/sbt/internals/DslAst.scala index 9cb5cfea7..bac7f08a1 100644 --- a/main/src/main/scala/sbt/internals/DslAst.scala +++ b/main/src/main/scala/sbt/internals/DslAst.scala @@ -58,4 +58,7 @@ case class DslDisablePlugins(plugins: Seq[AutoPlugin]) extends ProjectManipulati case class DslConfigs(cs: Seq[Configuration]) extends ProjectManipulation { override val toFunction: Project => Project = _.configs(cs: _*) } - +/** Represents registering an internal dependency for the current project */ +case class DslDependsOn(cs: Seq[ClasspathDep[ProjectReference]]) extends ProjectManipulation { + override val toFunction: Project => Project = _.dependsOn(cs: _*) +} diff --git a/notes/0.13.12/depends-on-build-sbt.md b/notes/0.13.12/depends-on-build-sbt.md new file mode 100644 index 000000000..04bb4760c --- /dev/null +++ b/notes/0.13.12/depends-on-build-sbt.md @@ -0,0 +1,9 @@ + [@anatolydwnld]: https://github.com/anatolydwnld + +### Fixes with compatibility implications + +### Improvements + +- Add the ability to call dependsOn for the current project inside a build sbt file. By [@anatolydwnld][@anatolydwnld] + +### Bug fixes diff --git a/sbt/src/sbt-test/project/subproject-dependson/build.sbt b/sbt/src/sbt-test/project/subproject-dependson/build.sbt new file mode 100644 index 000000000..9782f67c4 --- /dev/null +++ b/sbt/src/sbt-test/project/subproject-dependson/build.sbt @@ -0,0 +1,11 @@ +val projA = project in file("projA") + +val projB = project in file("projB") + +lazy val check = taskKey[Unit]("Verifies expected build behavior") + +check := { + val projBDeps = (dependencyClasspath in (projB, Compile)).value.map(_.data) + val assertion = projBDeps.filter(_.getAbsolutePath.contains("projA")).nonEmpty + assert(assertion, "Unable to find projA classes in projB's dependency list") +} diff --git a/sbt/src/sbt-test/project/subproject-dependson/projA/build.sbt b/sbt/src/sbt-test/project/subproject-dependson/projA/build.sbt new file mode 100644 index 000000000..2cc74591f --- /dev/null +++ b/sbt/src/sbt-test/project/subproject-dependson/projA/build.sbt @@ -0,0 +1 @@ +name := "projA" diff --git a/sbt/src/sbt-test/project/subproject-dependson/projB/build.sbt b/sbt/src/sbt-test/project/subproject-dependson/projB/build.sbt new file mode 100644 index 000000000..732b88063 --- /dev/null +++ b/sbt/src/sbt-test/project/subproject-dependson/projB/build.sbt @@ -0,0 +1,3 @@ +name := "projB" + +dependsOn(LocalProject("projA")) diff --git a/sbt/src/sbt-test/project/subproject-dependson/test b/sbt/src/sbt-test/project/subproject-dependson/test new file mode 100644 index 000000000..a5912a391 --- /dev/null +++ b/sbt/src/sbt-test/project/subproject-dependson/test @@ -0,0 +1 @@ +> check \ No newline at end of file