From a849c89dfde99076902c39f14cefb3b24f9bd5d5 Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Sat, 18 Feb 2017 01:35:36 +0000 Subject: demonstrate all the different multi-project-build and composition features this should probably be cleaned up and made more explainatory, but seems like at least all the cases are there --- examples/multi-combined-example/build/build.scala | 67 +++++++++++++++------- .../multi-combined-example/build/build/build.scala | 8 +++ .../shared/SomeSharedClass.scala | 2 +- .../sub1/SomeConcreteClass.scala | 2 +- .../sub2/SomeOtherConcreteClass.scala | 7 ++- examples/multi-combined-example/sub3/Main.scala | 6 ++ examples/multi-combined-example/sub4/Class4.scala | 2 + .../multi-combined-example/sub4/build/build.scala | 13 +++++ .../sub4/sub41/sub42/Sub4Example.scala | 2 + examples/multi-combined-example/sub5/Main.scala | 6 ++ .../multi-combined-example/sub6/Sub6Example.scala | 2 + 11 files changed, 92 insertions(+), 25 deletions(-) create mode 100644 examples/multi-combined-example/build/build/build.scala create mode 100644 examples/multi-combined-example/sub3/Main.scala create mode 100644 examples/multi-combined-example/sub4/Class4.scala create mode 100644 examples/multi-combined-example/sub4/build/build.scala create mode 100644 examples/multi-combined-example/sub4/sub41/sub42/Sub4Example.scala create mode 100644 examples/multi-combined-example/sub5/Main.scala create mode 100644 examples/multi-combined-example/sub6/Sub6Example.scala (limited to 'examples') diff --git a/examples/multi-combined-example/build/build.scala b/examples/multi-combined-example/build/build.scala index 7d1ff9f..bdeacc7 100644 --- a/examples/multi-combined-example/build/build.scala +++ b/examples/multi-combined-example/build/build.scala @@ -1,44 +1,69 @@ +package cbt_build.cbt_examples.multi_combined_example import cbt._ -import cbt._ -trait SharedCbtBuild extends BaseBuild{ + +trait ScalaVersion extends BaseBuild{ override def defaultScalaVersion = "2.10.6" } +trait SharedBuild extends ScalaVersion{ + override def dependencies: Seq[Dependency] = Seq( new SharedDependency(context) ) + // Type-safe embedding of other build. Requires dependency in build/build/build.scala + def sub4 = new cbt_build.cbt_examples.multi_combined_example.sub4.Build( + // currently you'll have to provide the correct working directory for that build here + context.copy( workingDirectory = projectDirectory / "sub4" ) + ) + def sub6 = DirectoryDependency(context.workingDirectory / "sub6") +} -class Shared(val context: Context) extends SharedCbtBuild +class SharedDependency(val context: Context) extends ScalaVersion{ + override def projectDirectory = context.workingDirectory / "shared" +} -class Sub(val context:Context) extends SharedCbtBuild{ - override def dependencies = Seq(new Shared( - context.copy( - workingDirectory = projectDirectory ++ "/../shared" - ) - )) +class Sub1(val context: Context) extends SharedBuild{ + override def projectDirectory = context.workingDirectory / "sub1" } -class Build(val context: Context) extends BaseBuild{ +class Sub2(val context: Context) extends SharedBuild{ + override def projectDirectory = context.workingDirectory / "sub2" + override def dependencies = super.dependencies ++ Seq( sub6 ) +} + +class Sub3(val context: Context) extends SharedBuild{ + override def projectDirectory = context.workingDirectory / "sub3" + override def dependencies = Seq( + // Embed another sub build reflectively. Convenient for simple dependencies + DirectoryDependency(context.workingDirectory / "sub4", "sub41", "sub42") + ) +} + +class Sub5(val context: Context) extends SharedBuild{ + override def projectDirectory = context.workingDirectory / "sub5" + override def dependencies = Seq( sub4.sub41.sub42 ) +} + +class Build(val context: Context) extends SharedBuild{ /* Currently each sub build nested into the main build needs to be an instance of a top-level class taking a Context as the sole parameter, similar to the Build class itself. This restriction may be lifted for more flexibility at some point, see https://github.com/cvogt/cbt/issues/306 */ - def sub1 = new Sub( - context.copy( - workingDirectory = projectDirectory ++ "/sub1" - ) - ) - def sub2 = new Sub( - context.copy( - workingDirectory = projectDirectory ++ "/sub2" - ) - ) + def sub1 = new Sub1(context) + def sub2 = new Sub2(context) + def sub3 = new Sub3(context) + def sub5 = new Sub3(context) + + def helloFromSub42 = sub4.sub41.sub42.hello - def sub3 = // DON'T DO THIS, anonymous classes are currently not supported here. + /* + // DON'T DO THIS, anonymous classes are currently not supported here. + def sub3 = new SharedCbtBuild{ def context = Build.this.context.copy( workingDirectory = Build.this.projectDirectory ++ "/sub3" ) } + */ override def dependencies = Seq( sub1, sub2 ) // assembles all projects } diff --git a/examples/multi-combined-example/build/build/build.scala b/examples/multi-combined-example/build/build/build.scala new file mode 100644 index 0000000..b87351d --- /dev/null +++ b/examples/multi-combined-example/build/build/build.scala @@ -0,0 +1,8 @@ +package cbt_build.cbt_examples.multi_combined_example.build +import cbt._ +class Build(val context: Context) extends BuildBuild{ + //println(DirectoryDependency( projectDirectory / ".." / "sub4" / "build" ).dependency.exportedClasspath) + override def dependencies: Seq[cbt.Dependency] = + super.dependencies :+ DirectoryDependency( projectDirectory / ".." / "sub4" / "build" ).dependency + def foo = DirectoryDependency( projectDirectory / ".." / "sub4" / "build" ) +} diff --git a/examples/multi-combined-example/shared/SomeSharedClass.scala b/examples/multi-combined-example/shared/SomeSharedClass.scala index d7d99e4..339d45d 100644 --- a/examples/multi-combined-example/shared/SomeSharedClass.scala +++ b/examples/multi-combined-example/shared/SomeSharedClass.scala @@ -1,4 +1,4 @@ -package cbt.examples.multi_combined +package cbt_examples.multi_combined class SomeSharedClass{ def main(args: Array[String]): Unit = { println(this.getClass.getSimpleName) diff --git a/examples/multi-combined-example/sub1/SomeConcreteClass.scala b/examples/multi-combined-example/sub1/SomeConcreteClass.scala index e55cb12..8039e13 100644 --- a/examples/multi-combined-example/sub1/SomeConcreteClass.scala +++ b/examples/multi-combined-example/sub1/SomeConcreteClass.scala @@ -1,2 +1,2 @@ -package cbt.examples.multi_combined +package cbt_examples.multi_combined object SomeConcreteClass extends SomeSharedClass diff --git a/examples/multi-combined-example/sub2/SomeOtherConcreteClass.scala b/examples/multi-combined-example/sub2/SomeOtherConcreteClass.scala index 399aee6..e339e24 100644 --- a/examples/multi-combined-example/sub2/SomeOtherConcreteClass.scala +++ b/examples/multi-combined-example/sub2/SomeOtherConcreteClass.scala @@ -1,2 +1,5 @@ -package cbt.examples.multi_combined -object SomeOtherConcreteClass extends SomeSharedClass +package cbt_examples.multi_combined +object SomeOtherConcreteClass extends SomeSharedClass{ + new cbt_examples.multi_combined_example.sub6.Sub6Example +} + diff --git a/examples/multi-combined-example/sub3/Main.scala b/examples/multi-combined-example/sub3/Main.scala new file mode 100644 index 0000000..00f8f77 --- /dev/null +++ b/examples/multi-combined-example/sub3/Main.scala @@ -0,0 +1,6 @@ +package cbt_examples.multi_combined_example.sub3 +object Main{ + def main( args: Array[String] ): Unit = { + println( Console.GREEN ++ "Hello " ++ Console.RESET + new cbt_examples.multi_combined_example.sub4.sub41.sub42.Sub4Example ) + } +} diff --git a/examples/multi-combined-example/sub4/Class4.scala b/examples/multi-combined-example/sub4/Class4.scala new file mode 100644 index 0000000..d937122 --- /dev/null +++ b/examples/multi-combined-example/sub4/Class4.scala @@ -0,0 +1,2 @@ +package cbt_examples.multi_combined_example.sub4 +class Sub4Example diff --git a/examples/multi-combined-example/sub4/build/build.scala b/examples/multi-combined-example/sub4/build/build.scala new file mode 100644 index 0000000..df5b689 --- /dev/null +++ b/examples/multi-combined-example/sub4/build/build.scala @@ -0,0 +1,13 @@ +package cbt_build.cbt_examples.multi_combined_example.sub4 +import cbt._ +class Build(val context: Context) extends BaseBuild{ + def sub41 = new Sub41(context) +} +class Sub41(val context: Context) extends BaseBuild{ + override def projectDirectory = context.workingDirectory / "sub41" + def sub42 = new Sub42(context.copy(workingDirectory=projectDirectory)) +} +class Sub42(val context: Context) extends BaseBuild{ + override def projectDirectory = context.workingDirectory / "sub42" + def hello = "Hello from Sub42" +} diff --git a/examples/multi-combined-example/sub4/sub41/sub42/Sub4Example.scala b/examples/multi-combined-example/sub4/sub41/sub42/Sub4Example.scala new file mode 100644 index 0000000..a4ea402 --- /dev/null +++ b/examples/multi-combined-example/sub4/sub41/sub42/Sub4Example.scala @@ -0,0 +1,2 @@ +package cbt_examples.multi_combined_example.sub4.sub41.sub42 +class Sub4Example diff --git a/examples/multi-combined-example/sub5/Main.scala b/examples/multi-combined-example/sub5/Main.scala new file mode 100644 index 0000000..6035cc2 --- /dev/null +++ b/examples/multi-combined-example/sub5/Main.scala @@ -0,0 +1,6 @@ +package cbt_examples.multi_combined_example.sub5 +object Main{ + def main( args: Array[String] ): Unit = { + println( Console.GREEN ++ "Hello " ++ Console.RESET ++ new cbt.examples.multi_combined_example.sub4.sub41.sub42.Sub4Example ) + } +} diff --git a/examples/multi-combined-example/sub6/Sub6Example.scala b/examples/multi-combined-example/sub6/Sub6Example.scala new file mode 100644 index 0000000..bab5993 --- /dev/null +++ b/examples/multi-combined-example/sub6/Sub6Example.scala @@ -0,0 +1,2 @@ +package cbt_examples.multi_combined_example.sub6 +class Sub6Example -- cgit v1.2.3